我正在尝试使用make perl shout when trying to access undefined hash key中的代码,但是它不起作用。
我认为在过去十年中tie
的工作方式已经发生了变化。
我得到的错误是:
Safe::Hash must define either a TIEHASH() or a new() method at /home/bennett/work/stock/Indicator.pm line 97.
我只需要大约所用哈希值的5%,就希望使用不会改变界面的东西(即$foo{bar}
)。也就是说,我不想使用Moose
或涉及访问器方法的东西。
这是为什么:我想将其打开以进行调试和开发,否则将其关闭。该程序和计算机的速度足够慢。
欢迎使用任何固定的代码(请参见上面的链接)或其他解决方案。
这是为x86_64-Linux-thread-multi构建的Perl 5,版本16,Subversion 3(v5.16.3)
答案 0 :(得分:2)
对于不存在哈希密钥,该密钥与存在但具有未定义值的哈希密钥不同,可以使用Hash::Util中的lock_hash。请注意,它还限制了所有值的更改。不幸的是,除非您尝试进行设置,否则lock_keys会更接近您的要求,它不会导致访问不存在的密钥时出错。
use strict;
use warnings;
use Hash::Util 'lock_hash';
my %foo = (a => 1, b => 2);
lock_hash %foo;
print $foo{c}; # error
这与Const::Fast用于只读哈希的底层机制相同,但是由于它试图同时充当只读(无法更改现有值)和受限(不存在的密钥无法访问。