在 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); |