我有一个基于祝福hashref的Perl类(https://github.com/kylemhall/Koha/blob/master/Koha/Object.pm)
这是一个基于社区的项目,有许多不同技能的开发人员.
我看到的是一些开发人员不小心使用我们的对象作为hashrefs.实际数据不存储在祝福的hashref中,而是存储在hashref中的dbic对象中(在$ self - > {_ result}中).当开发人员尝试像$ object这样的东西时 - > {id} perl不会抱怨,它只会返回undef,正如预期的那样.
我想要做的是A)当发生这种情况时让脚本爆炸并出现错误B)允许使用hashref语法来设置/获取存储在$ self中的dbic对象中的值 - > {_ result}
我试过用:
use overload '%{}' => \&get_hashref;
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,每次调用常规方法时都会调用get_hashref!这在某种程度上是有道理的,因为对象本身是一个hashref.我确信这与Perl内部有关,可以将祝福的hashref作为对象.
我正在努力实现甚至可能吗?
我建议使用基于标量或基于数组的对象而不是基于散列的对象.这是一种廉价(高效)的解决方案,因为它只会导致犯罪者违反现有的类型检查.
例如,以下生成的对象只是对实际对象的引用.只需使用$$self而不是$self在方法中.
$ perl -e'
sub new {
my $class = shift;
my $self = bless(\{}, $class);
# $$self->{...} = ...;
return $self;
}
my $o = __PACKAGE__->new();
my $id = $o->{id};
'
Not a HASH reference at -e line 9.
Run Code Online (Sandbox Code Playgroud)