有没有办法让Perl将数组引用的字符串化版本(例如ARRAY(0x8152c28))转换为实际的数组引用?
例如
perl -e 'use Data::Dumper; $a = [1,2,3];$b = $a; $a = $a.""; warn Dumper (Then some magic happens);'
Run Code Online (Sandbox Code Playgroud)
会屈服
$VAR1 = [
1,
2,
3
];
Run Code Online (Sandbox Code Playgroud) 我们正在慢慢地将我们的大型Perl应用程序重构为面向对象的接口,特别是对于数据模型.令人讨厌的部分是堆栈跟踪变得不那么有用.举一个捏造的例子:之前.
sub send_message {
my ($user_id, $message) = @_;
...
Carp::confess('test');
}
# output:
test at example.pm line 23
foo('42', 'Hello World') called at example.pl line 5
Run Code Online (Sandbox Code Playgroud)
后.
sub send_message {
my ($user, $message) = @_;
...
Carp::confess('test');
}
# output:
test at example.pm line 23
foo('MyApp::Model::User=HASH(0x2c94f68)', 'Hello World') called at example.pl line 5
Run Code Online (Sandbox Code Playgroud)
所以现在我看不到传递给哪个用户foo(),我只看到类名(已经记录)和一个对象的内存地址.
我尝试使用overload.pm在模型类上安装stringification运算符:
use overload ( '""' => \&stringify );
sub stringify {
my ($self) = @_;
return sprintf '%s[id=%d]', ref($self), $self->id;
}
Run Code Online (Sandbox Code Playgroud)
但这并不影响长篇大论.我想要的是这样的:
test …Run Code Online (Sandbox Code Playgroud)