perl - 为什么只有其中一个告诉我 "Modification of a read-only value attempted"?

标签 perl

此代码运行并产生输出 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/

相关文章:

perl - 在 Perl 中制作数据结构的深拷贝的最佳方法是什么?

perl - 在 Ubuntu 中自动安装基于包的 Perl 模块

perl - 使用反引号时转义空格

windows - 仅当我在 Windows 上运行 Perl 脚本时,如何才能包含 Win32 模块?

perl - 我应该在哪里放置 Perl .t 测试的通用实用函数?

regex - 如何找到字符串上正则表达式匹配的百分比?

mysql - 试图找出为什么 sub 会导致 mysql 数据库中有 27 个条目

perl - PSGI 响应 : What kinds of filehandles can be expected to work with PSGI, 和 Plack?

multithreading - 为线程设计的哈希,以 YAML 格式转储

regex - 为什么这个正则表达式不起作用?