首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么只有一条提示是“me of a read-only value attempted"?

为什么只有一条提示是“me of a read-only value attempted"?
EN

Stack Overflow用户
提问于 2012-09-29 09:13:52
回答 2查看 898关注 0票数 11

此代码运行并生成输出abc

代码语言:javascript
复制
for(10..12){$_=sprintf"%x",$_;print}

但是这段代码死于一个Modification of a read-only value attempted at ...错误:

代码语言:javascript
复制
for(10,11,12){$_=sprintf"%x",$_;print}

为什么这些构造被区别对待?

(这段代码也可以工作:)

代码语言:javascript
复制
for(10..10,11..11,12..12){$_=sprintf"%x",$_;print}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-29 09:19:10

可能是因为当您在一个范围上执行foreach时,“计数循环”优化开始发挥作用。for (1, 2, 3, 4)实际上构造了列表(1,2,3,4),其中包含那些特定的只读值,但for (1..4)并非如此;它只是从范围的开始迭代到结束,依次为$_提供每个连续的值,我猜当您尝试如此接近地赋值给$_时,没有人认为匹配这种行为是值得的。

票数 13
EN

Stack Overflow用户

发布于 2012-10-11 03:27:28

你的最后一段代码正在做一些不应该做的事情,最好用下面的代码来演示:

代码语言:javascript
复制
for (1..2) {
   for (1..3, 5..7) {
      print $_++;
   }
   print "\n";
}

输出:

代码语言:javascript
复制
123567
234678

RT#3105

就我而言,有三种for循环:

  • “C风格”(for (my $i=1; $i<4; ++$i))
  • Iterating (for my $i (1,2,3))
  • Counting (for my $i (1..3))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12649083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档