我认为标题是不言自明的.很多时候我有小错别字,在尝试访问未定义的哈希键时会得到意想不到的结果.我知道defined每次访问哈希键之前我都可以添加一些检查,但我想知道是否有更清晰的方法来警告这些情况......
最好,戴夫
Eri*_*rom 15
这可能最好使用绑定哈希.绑定变量允许您定义变量的低级操作的实现.在这种情况下,我们需要一个特殊的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
Run Code Online (Sandbox Code Playgroud)
在Safe::Hash上面的实现中,我首先加载了Tie::Hash哪个提供Tie::StdHash.设置@ISA以Tie::StdHash提供我们的新包装与行为举止正常哈希相同领带的方法.每个联系方法都在http://perldoc.perl.org/perltie.html上列出
在这种情况下,唯一要覆盖的方法FETCH是传递对隐藏绑定对象(在本例中为hashref)的引用,以及要使用的键.它检查插槽是否存在,并返回它或引发错误
使用Hash :: Util:
use Hash::Util "lock_keys";
my %hash = (foo => 42, bar => 23);
lock_keys(%hash);
print $hash{foo};
print $hash{baz};
print $hash{bar};
Run Code Online (Sandbox Code Playgroud)
输出:
42
Attempt to access disallowed key 'baz' in a restricted hash at foo line 5.
Run Code Online (Sandbox Code Playgroud)
还有其他功能允许指定允许哪些键,而不仅仅是默认已经存在的键.
| 归档时间: |
|
| 查看次数: |
2960 次 |
| 最近记录: |