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

尝试访问未定义的哈希密钥时使perl喊出来

发布时间:2020-12-15 21:39:04 所属栏目:大数据 来源:网络整理
导读:我认为标题是不言自明的.很多时候我有小错别字,当我尝试访问未定义的哈希键时,我得到了意想不到的结果.我知道我可以在每次访问哈希键之前添加一些定义的检查,但我想知道是否有任何更清晰的方法来警告这种情况…. 最好, 戴夫 解决方法 这可能最好使用绑定哈希
我认为标题是不言自明的.很多时候我有小错别字,当我尝试访问未定义的哈希键时,我得到了意想不到的结果.我知道我可以在每次访问哈希键之前添加一些定义的检查,但我想知道是否有任何更清晰的方法来警告这种情况….

最好,
戴夫

解决方法

这可能最好使用绑定哈希.绑定变量允许您定义变量的低级操作的实现.在这种情况下,我们需要一个特殊的fetch方法,在访问不存在的键时会死掉:
use warnings;
use strict;

{package Safe::Hash;
        require Tie::Hash;
        our @ISA = 'Tie::StdHash';
        use Carp;

        sub FETCH { 
                exists $_[0]{$_[1]} or croak "no key $_[1]";
                $_[0]{$_[1]}
        }
}

tie my %safe => 'Safe::Hash';

$safe{a} = 5;  # ok

print $safe{a},"n";  # ok

$safe{b} = 10; # ok 

print $safe{bb},"n";  # dies

在上面的Safe :: Hash的实现中,我首先加载Tie :: Hash,它提供了Tie :: StdHash.将@ISA设置为Tie :: StdHash为我们的新包提供了tie方法,其行为与普通哈希相同.每种联系方法都在http://perldoc.perl.org/perltie.html中列出

在这种情况下,唯一要覆盖的方法是FETCH,它传递对隐藏绑定对象(在本例中为hashref)的引用,以及要使用的密钥.它检查插槽是否存在,并返回它或引发错误

(编辑:李大同)

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

    推荐文章
      热点阅读