曲径通幽论坛

标题: 关于 "Modification of a read-only value" 错误 [打印本页]

作者: beyes    时间: 2011-10-13 11:08
标题: 关于 "Modification of a read-only value" 错误
在 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);





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2