gpt4 book ai didi

perl - 任何人都可以向我解释这个只读异常吗?

转载 作者:行者123 更新时间:2023-12-04 20:23:58 29 4
gpt4 key购买 nike

下面是我的代码(不用担心模块顶部有一个 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。关于如何解决它的任何想法?

最佳答案

如果来自 DBI::fetchrow_arrayref 的引用以只读方式返回,尝试覆盖它无济于事:引用是只读的,而不是事物(即具有列值的数组)。

如果您需要破坏性更新,请在源头制作自己的副本,例如,

my $arg_ref = [ $sth->fetchrow_array ];

关于perl - 任何人都可以向我解释这个只读异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121393/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com