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 使用平局可以实现同样的目标,但它会更昂贵. (绑定变量建立在魔法之上.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |