我试图按照跟踪变量使用的顺序绑定一个哈希(或 hashref)。
一切都适用于简单的情况,但是当我尝试在一些真实代码上使用我的模块时,我遇到了这个错误:
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)
我已经使用以下代码复制了错误:
use Tie::Hash::Usages;
use JSON;
my @arr = (
{
key1 => "ac",
key2 => 12,
key3 => 12
},
);
my %tied_hash;
tie %tied_hash, 'Tie::Hash::Usages';
$tied_hash{key1} = \@arr;
my @val = $tied_hash{key1};
print encode_json(\@val)."\n\n"; #this works
print encode_json($tied_hash{key1}); #this doesn't
相同的代码适用于普通哈希。
我需要它在第二种情况下也能工作,代码库很大,我不想改变它,也不想怀疑某处某处在某些特定情况下不起作用。
Usages.pm(简化版)
package Tie::Hash::Usages;
use strict;
use warnings;
use Tie::Hash;
use vars qw(@ISA);
@ISA = qw(Tie::StdHash);
sub TIEHASH {
my ($class, $tracker, $filename) = @_;
my %hash;
bless \%hash, $class;
}
sub STORE {
my ($self, $key, $val) = @_;
$self->{$key} = $val;
}
sub DELETE {
my ($self, $key) = @_;
delete $self->{$key};
}
sub FETCH {
my ($self, $key) = @_;
return $self->{$key};
}
sub DESTROY {
my $self = shift;
}
1;
perl 版本:v5.18.2