相关疑难解决方法(0)

如何将字符串化版本的数组引用转换为Perl中的实际数组引用?

有没有办法让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

10
推荐指数
3
解决办法
2420
查看次数

如何在longmess中调整对象的渲染?

我们正在慢慢地将我们的大型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)

debugging perl stack-trace

8
推荐指数
1
解决办法
211
查看次数

标签 统计

perl ×2

debugging ×1

stack-trace ×1