出于性能原因,我想用懒惰的Moose对象替换我的程序中使用的一些哈希值。问题是,有很多我无法控制的代码当然使用->{key}
来访问元素。这种访问与Moose对象一起使用,但在初始化之前不能与懒惰对象一起使用:
package Stuff;
use Moose;
has foo => (
lazy=>1,
default=> sub { +{bar=>baz} }
);
package main;
my $x = Stuff->new();
print Dumper $x->{foo}; # undef =(
print Dumper $x->foo; # {bar => baz }
print Dumper $x->{foo}; # {bar => baz }
是否可以首先使$x->{foo}
初始化变量?
答案 0 :(得分:1)
您不能直接将其用作哈希,但使用Tie::Moose,您可以创建一个调用底层Moose方法的哈希。您可以将此哈希传递给其他代码。
use Tie::Moose;
my $x = Stuff->new();
tie my %x, "Tie::Moose", $x;
print Dumper($x{foo}); # { 'bar' => 'baz' }
答案 1 :(得分:0)
因此,只要访问哈希对象的元素,您就希望代码运行?这可以使用magic,但会大大减慢对对象的访问速度。