此代码运行并生成输出abc
for(10..12){$_=sprintf"%x",$_;print}但是这段代码死于一个Modification of a read-only value attempted at ...错误:
for(10,11,12){$_=sprintf"%x",$_;print}为什么这些构造被区别对待?
(这段代码也可以工作:)
for(10..10,11..11,12..12){$_=sprintf"%x",$_;print}发布于 2012-09-29 09:19:10
可能是因为当您在一个范围上执行foreach时,“计数循环”优化开始发挥作用。for (1, 2, 3, 4)实际上构造了列表(1,2,3,4),其中包含那些特定的只读值,但for (1..4)并非如此;它只是从范围的开始迭代到结束,依次为$_提供每个连续的值,我猜当您尝试如此接近地赋值给$_时,没有人认为匹配这种行为是值得的。
发布于 2012-10-11 03:27:28
你的最后一段代码正在做一些不应该做的事情,最好用下面的代码来演示:
for (1..2) {
for (1..3, 5..7) {
print $_++;
}
print "\n";
}输出:
123567
234678就我而言,有三种for循环:
for (my $i=1; $i<4; ++$i))for my $i (1,2,3))for my $i (1..3))https://stackoverflow.com/questions/12649083
复制相似问题