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

perl – 如何通过特定的哈希键来改变它的值?

发布时间:2020-12-15 23:23:00 所属栏目:大数据 来源:网络整理
导读:我有一个哈希,例如$散列 { ‘富’} { ‘酒吧’}. 我想在bar键值变化的任何地方调用Carp :: cluck. 怎么做 ?在CPAN上有没有可以做到这一点的现成模块? 解决方法 my $hash = { foo = { bar = 1 } };Internals::SvREADONLY( $hash-{foo}{bar},1 );$hash-{foo}
我有一个哈希,例如$散列> { ‘富’} { ‘酒吧’}.

我想在bar键值变化的任何地方调用Carp :: cluck.

怎么做 ?在CPAN上有没有可以做到这一点的现成模块?

解决方法

my $hash = { foo => { bar => 1 } };
Internals::SvREADONLY( $hash->{foo}{bar},1 );
$hash->{foo}{bar} = 2;

产生

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

但这是一个致命的错误,它不包括跟踪(除非使用Carp :: Always).

我建议在标量中添加set magic.

use Carp            qw( cluck );
use Variable::Magic qw( wizard cast );

my $wizard = wizard(
   set => sub {
      cluck("Warning: Modification of a read-only value attempted");
   },);

my $hash = { foo => { bar => 1 } };
cast( $hash->{foo}{bar},$wizard );
$hash->{foo}{bar} = 2;

产生

Warning: Modification of a read-only value attempted at -e line 6.
        main::__ANON__(SCALAR(0x4200c90),undef) called at -e line 12
        eval {...} called at -e line 12

使用平局可以实现同样的目标,但它会更昂贵. (绑定变量建立在魔法之上.)

(编辑:李大同)

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

    推荐文章
      热点阅读