Perl 修改此代码以打印与上一位置不同的x号元素

Perl 修改此代码以打印与上一位置不同的x号元素,perl,Perl,我编写这段代码是为了每隔x个元素查找子字符串: print "enter file path\n"; $letters = <>; chomp ($letters); $sequence = ""; open (LETTERS, $letters) or die "error opening\n"; print "how many letters at a shot\n"; $number = <>; chomp ($number); $size = length

我编写这段代码是为了每隔x个元素查找子字符串:

print "enter file path\n";
$letters = <>;
chomp ($letters);

$sequence = "";

open (LETTERS, $letters) or die "error opening\n";

print "how many letters at a shot\n";
$number = <>;
chomp ($number);

$size = length $sequence;
chomp ($size);


for ($i = 0; $i < $size; $i++) {
    $test = substr ($sequence, $i, $number);
    print "> Test $i\n";
    print "$test\n";

    if ($i >= $size - $number) {
    last;
    }

    }
我得到这个结果:

> Test 0 abc
> Test 1 bcd
> Test 2 cde
> Test 3 def
> Test 4 efg
每个子串都不同于前一个子串的一个位置,我希望能够控制这个数字并将子串错位2。因此,结果将是:

> Test 0 abc
> Test 2 cde
> Test 4 efg
有什么建议吗?谢谢

添加:

...
$step = <>;
...
。。。
$step=;
...
和变化:

for ($i = 0; $i < $size; $i++) {
($i=0;$i<$size;$i++)的
{

用于($i=0;$i<$size;$i+=$step){

对于($i=0;$i<$size;$i+=2){

@nmf-当您获得适当的变量命名时,如果您要使用substr()在调用它之前,您应该检查溢出,否则如果$i+$number超过字符串中的最后一个字符,它只会到达最后一个字符。将溢出作为循环中的第一个表达式。例如,
last if(($i+$number)>=$len);
然后在for构造中执行步骤增量
for($i=0;$i<$size;$i+=$step)
。我删除了regex标记,因为它从来都不是必需的。还删除了我的帖子,因为它是regex解决方案。
for ($i = 0; $i < $size; $i++) {
for ($i = 0; $i < $size; $i+=$step) {