曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3337|回复: 0
打印 上一主题 下一主题

关于 "Modification of a read-only value" 错误

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2011-10-13 11:08:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 Perl 编程中,可能会遇到 “Modification of a read-only value” 这种错误提示,一般有以下几种可能的情况:

1. 用在循环中
[code=perl]#!/usr/bin/perl

for my $var (8,3,2) {
       $var++;
}[/mw_shl_code]

这里,不要认为将 8, 3, 2 这几个值复制给变量 $var ,然后我们便可以修改它,实际上 $var 只是常量 8, 3, 2 的别名。

2. 在 foreach, map 或者 grep 中修改 $_
[Perl] 纯文本查看 复制代码
for (1,2) {
  chomp;
}

for ("foo", @list) {
  s/foo/bar/;
}

@array = map  { $_++ } (1,2);
@array = grep { $_++ } (1,2);

上面,$_ 都是作为常量的别名,也不能在循环中修改之。

3. 直接修改 @_ 变量的值
[Perl] 纯文本查看 复制代码
sub incr {
  $_[0]++;
}
my $n = 1;
incr($n); # 正确!
incr(1);  # 错误!


4. 在 sort 函数中修改 $a 或 $b
[Perl] 纯文本查看 复制代码
@array = sort {$a++} (1,2,3,8,5);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 05:02 , Processed in 0.077948 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表