Fra*_*ank 4 variables perl foreach loops readonly
以下代码给出了一条错误消息:
#!/usr/bin/perl -w
foreach my $var (0, 1, 2){
$var += 2;
print "$var\n";
}
Run Code Online (Sandbox Code Playgroud)
Modification of a read-only value attempted at test.pl line 4.
有没有办法修改$var?(我只是好奇地问;看到这个错误信息我真的很惊讶.)
mob*_*mob 12
在foreach $var (@list)构造中,$var变为别名的循环元素,在某种意义上,内存地址$var将是与元素相同的地址@list.因此,您的示例代码尝试修改只读值,并获得错误消息.
这个小脚本将演示foreach构造中发生的事情:
my @a = (0,1,2);
print "Before: @a\n";
foreach my $var (@a) {
$var += 2;
}
print "After: @a\n";
Before: 0 1 2
After: 2 3 4
Run Code Online (Sandbox Code Playgroud)
附加信息: 此产品由perlsyn容易掩饰,但给人的整体瓢:
Foreach循环
...
如果LIST的任何元素是左值,您可以通过修改循环内的VAR来修改它.相反,如果LIST的任何元素不是左值,则任何修改该元素的尝试都将失败.换句话说,"foreach"循环索引变量是您循环的列表中每个项目的隐式别名.
Perl抱怨的是常量值,而不是循环变量.它抱怨的readonly值是你的0因为$var它是别名,它不存储在变量中(这是你可以改变的).如果循环遍历数组或变量列表,则没有这个问题.
| 归档时间: |
|
| 查看次数: |
2271 次 |
| 最近记录: |