此代码运行并产生输出 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}
最佳答案
可能是因为当您 foreach
时开始发挥作用的“计数循环”优化。超过一个范围。 for (1, 2, 3, 4)
实际上构造列表 (1, 2, 3, 4),包含那些特定的只读值,但 for (1..4)
没有;它只是从范围的开始到结束迭代,给出 $_
依次每个连续的值,我想没有人认为当您尝试分配给 $_
时匹配行为是值得的。那密切。
关于perl - 为什么只有其中一个告诉我 "Modification of a read-only value attempted"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649083/