1

尝试dieeval.

代码如下;

$status = eval { $self->$func( @{$y->{args}} ); };

在这种情况下$self->$func,指向一个处理程序,该处理程序在错误时分离到某个页面,如下所示:

sub detach
{
    my $self   = shift;
    my $url    = shift;
    my @params = @_;

    if( $url !~ /^\// )
    {
        $url = '/' . $self->namespace . '/' . $url;
    }
    $url =~ s/\sat.*$//;
    print STDERR $self->uri . ": Detaching to " . $url . "\n";

    die "REDIR:$url";
}

应该放入"REDIR:$url"$@以便在eval退出时可用。

然而,相反 Carp.pm 死了,我假设在diewith内部的某个地方

Bizarre copy of ARRAY in sassign at /usr/share/perl/5.10/Carp.pm line 182

环顾四周,有一些建议表明 perl 中存在与死期间堆栈相关的错误(例如http://code.activestate.com/lists/perl5-porters/149248/),但是我担心在这个点我对perl的了解有限,我不确定这是否相关,或者如果是的话该怎么办。:(

有谁知道是否有解决此问题的方法或另一种方法可以将错误字符串从 传回eval,或者我是否读错了?

4

2 回答 2

1

这听起来像#52610。您是否使用任何可能成为罪魁祸首的挂接到调试器的模块?

于 2012-07-22T20:06:20.883 回答
1

结果证明这是我使用的 Perl 版本的问题。升级到 5.16.1 解决了这个问题。

于 2012-08-22T22:51:50.947 回答