加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 任何人都可以向我解释这个只读的例外情况吗?

发布时间:2020-12-15 21:44:56 所属栏目:大数据 来源:网络整理
导读:下面是我的代码(不要担心模块顶部有USUW) 我正在测试数组引用是否是只读的,如果是这种情况,那么我将它复制到另一个数组引用.测试显示该数组不是只读的,但是当它运行时,它会因该错误而失败. (对于那些不熟悉我或 Smart::Comments 的人 – 那些###是 Smart::Co
下面是我的代码(不要担心模块顶部有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
###      ]

但这是错误:

Modification of a read-only value attempted at ....pm line 247.

(247是:

return map { my $val = shift @$arg_ref;

)

有没有人对这个问题有所了解?我们正在运行Perl 5.8.7.有关如何解决它的任何想法?

解决方法

它看起来不像 Scalar::Util::readonly的结果可以信任使用你想如何使用它.见证人:
perl -MScalar::Util=readonly -MReadonly -wle'
    Readonly my $arg_ref => [ qw(a b c)];
    print readonly $arg_ref;
    $arg_ref = 1;'

打印:

0
 Modification of a read-only value attempted at -e line 1.

(使用Readonly 1.03,Scalar :: Util 1.23在perl5.8.8下测试)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读