xen*_*ide 2 perl operator-overloading moose
我正在尝试获取一个moose对象,它将moose对象作为一组嵌套的普通perl数据类型引用,我可以将其称为hashref.例如
my $ref = { %{ $obj } }
Run Code Online (Sandbox Code Playgroud)
结构可能就像
{
name => "bob",
phones => [
{
phone_number => "15555554698"
},
]
}
Run Code Online (Sandbox Code Playgroud)
代替
bless( {
name => "bob",
phones => [
bless( {
phone_number => "15555554698"
}, 'PhoneNumber' )
]
}, 'User' )
Run Code Online (Sandbox Code Playgroud)
这是我的尝试
use overload '%{}' => '_hashref';
sub _hashref {
my $self = shift;
foreach my $attr ( $self->meta->get_all_attributes ) {
if ( $attr->has_read_method ) {
say $attr->name;
say $attr->get_value( $self );
}
}
return {};
}
Run Code Online (Sandbox Code Playgroud)
不幸的get_value是,似乎做了一些递归的事情,直到它发生了段错误.我试过传递它__PACKAGE__,'User'但似乎都没有工作.有没有人对我如何获得属性和值有任何建议,以便我可以对它们进行操作?还是另一种更聪明的方法呢?注意:我知道我现在正在返回一个空的hashref,此时只是想弄清楚我如何得到这些值
get_value正在进行的"递归"操作是尝试访问
$self->{$slot_name},这是调用你的%{}重载,这是调用get_value...你可以通过暂时击败重载来解决这个问题(在重载文档中有一个例子),或者你可以停止尝试重新实现MooseX :: Storage已经做得很好.