我是 Perl 新手,在编写以下代码片段后对 Perl 作用域规则感到困惑:
#!/usr/bin/perl
my $i = 0;
foreach $i(5..10){
print $i."\n";
}
print "Outside loop i = $i\n";
我预计输出如下:
5
6
7
8
9
10
Outside loop i = 10
但它的给予:
5
6
7
8
9
10
Outside loop i = 0
因此变量 $i 的值在循环退出后不会改变。这里发生了什么事?
根据有关 foreach 循环的 perldoc 信息:here http://perldoc.perl.org/perlsyn.html#Foreach-Loops
foreach 循环迭代普通列表值并设置
变量 VAR 依次成为列表中的每个元素。如果变量
前面带有关键字 my,那么它是词法范围的,并且是
因此仅在循环内可见。否则,变量是
隐式局部于循环并在退出时恢复其先前的值
循环。如果该变量之前用 my 声明过,则它使用
该变量而不是全局变量,但它仍然本地化到
循环。这种隐式本地化仅发生在 foreach 循环中。
如果你想在循环之外保留 $i 的值,那么你可以在 foreach 循环调用中省略 $i 并使用 perl 的特殊变量 $_ ,示例如下:
#!/usr/bin/perl
use strict;
use warnings;
my $i = 0;
foreach (5..10){
print $_."\n";
$i = $_;
}
print "Outside loop i = $i\n";
5
6
7
8
9
10
外循环 i = 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)