foreach循环中的PERL范围

1 perl

我有一个perl范围问题.

use strict;
use warnings;

our @cycles = (0,1,2,3,4);

foreach my $cycle (@cycles){
    my $nextcycle = 0;
    foreach $nextcycle (@cycles){
        if ($cycle+1 == $nextcycle){
            print "found cycle+1, $nextcycle\n";
            last;
        }
    }
    print "current=$cycle, nextcycle=$nextcycle\n";
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出:

发现周期+ 1,1

current = 0,nextcycle = 0

发现周期+ 1,2

current = 1,nextcycle = 0

发现周期+ 1,3

current = 2,nextcycle = 0

发现周期+ 1,4

current = 3,nextcycle = 0

current = 4,nextcycle = 0

我期待这个:

发现周期+ 1,1

current = 0,nextcycle = 1

发现周期+ 1,2

current = 1,nextcycle = 2

发现周期+ 1,3

current = 2,nextcycle = 3

发现周期+ 1,4

current = 3,nextcycle = 4

current = 4,nextcycle = 0

我进一步修改了循环看起来像这样,得到了我想要的东西:

use strict;
use warnings;

our @cycles = (0,1,2,3,4);

foreach my $cycle (@cycles){
    my $nextcycle = 0;
    foreach my $tempcycle (@cycles){
        if ($cycle+1 == $tempcycle){
            $nextcycle = $tempcycle;
            print "found cycle+1, $nextcycle\n";
            last;
        }
    }
    print "current=$cycle, nextcycle=$nextcycle\n";
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么第一个循环不起作用!

Ted*_*opp 9

构造上的Perl手册foreach:

foreach循环遍历正常列表值,并依次将变量VAR设置为列表的每个元素.如果变量前面带有关键字my,则它是词法范围的,因此仅在循环中可见.否则,该变量隐含在循环的本地,并在退出循环时重新获得其前一个值.