以下是我的代码(不用担心,模块顶部有USUW)
我正在测试一个数组引用是否为只读,如果是的话,我就将其复制到另一个数组引用中。测试表明该数组并非只读,但在运行时却失败了并出现了那个错误。(对于不熟悉我的人或 Smart::Comments
--那些###
是Smart::Comments
。)
### readonly( $arg_ref ) : readonly( $arg_ref )
### readonly( @$arg_ref ) : readonly( @$arg_ref )
my @ro = map { readonly( $_ ) } @$arg_ref;
### @ro
if ( readonly $arg_ref ) {
$arg_ref = [ @$arg_ref ];
}
return map { my $val = shift @$arg_ref;
$_ => $val
} @_
;
这是我得到的输出结果:
### readonly( $arg_ref ) : 0
### readonly( @$arg_ref ) : 0
### @ro: [
### 0,
### 0,
### 0,
### 0,
### 0
### ]
但是这里出现了错误:
Modification of a read-only value attempted at ....pm line 247.
(247表示:
return map { my $val = shift @$arg_ref;
有人对这个问题很熟悉吗?我们正在运行Perl 5.8.7。有什么解决方法吗?
readonly
符号是从哪里来的?我不认为 Readonly 模块提供了这个符号。 - EtherScalar::Util::readonly
, - Axeman$arg_ref
是如何获取它的值的? - Greg Bacon