这是要处理的绑定哈希的预期和直观行为$h{a}++
:
$ perl -E'
sub DESTROY {}
sub AUTOLOAD { say "$AUTOLOAD @_"; bless {} }
tie %h, main;
$h{a}++;
'
main::TIEHASH main
main::FETCH main=HASH(0x7fb6c982a188) a
main::STORE main=HASH(0x7fb6c982a188) a 140423041558889
这也有望处理嵌套 case $h{a}{b}++
,但是我无法弄清楚为什么,最重要的是,如何覆盖此行为:
$ perl -E'
sub DESTROY {}
sub AUTOLOAD { say "$AUTOLOAD @_"; bless {} }
tie %h, main;
$h{a}{b}++;
'
main::TIEHASH main
main::FETCH main=HASH(0x7fbff102a188) a
我在测试Tie::CHI时偶然发现了这一点。它显然能够存储复杂的对象:
$ perl -MDateTime -MTie::CHI -E'
tie %c, "Tie::CHI", { driver => "File", root_dir => "." };
$c{a} = DateTime->now;
'
Perl 能够从深度嵌套的结构中检索任何数据,此外:
print Dumper $c{json}->{results}[0]{geometry}{location};
但是在嵌套结构中存储在任何 tie() 的哈希中都不起作用:
$c{json}->{results}[0]{geometry}{location} = [0, 0];
可以修补 Tie::CHI 以使用更多 DWIMmery 处理这种情况吗?如果没有,有什么替代方案?