Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Carp:sassign中数组的奇怪副本。有办法吗?_Perl_Die_Carp - Fatal编程技术网

Perl Carp:sassign中数组的奇怪副本。有办法吗?

Perl Carp:sassign中数组的奇怪副本。有办法吗?,perl,die,carp,Perl,Die,Carp,当我试图从eval中死去时,我遇到了一个恼人的问题 守则如下: $status = eval { $self->$func( @{$y->{args}} ); }; 在本例中,$self->$func指向一个处理程序,该处理程序在出现以下错误时会分离到特定页面: sub detach { my $self = shift; my $url = shift; my @params = @_; if( $url !~ /^\// )

当我试图从
eval
中死去时,我遇到了一个恼人的问题

守则如下:

$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在
die
with的内部某处死亡

环顾四周,有人认为perl中有一个与die期间的堆栈相关的bug(例如),但是我担心目前我对perl的了解还不够,我不确定这是否相关,或者如果相关的话该怎么办<代码>:(


有人知道有没有办法解决这个问题,或者有没有其他办法从
eval
返回错误字符串,或者我读错了吗?

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

这原来是Perl I was u版本的问题唱
升级到5.16.1解决了这个问题。

你能提供一个工作示例吗?我已经尝试将代码放入一个示例中,但是效果很好,这让我认为这与我引用的文章有关。当时我认为我可能有一个旧版本的Carp,但是这是最新的。我将继续尝试获得一个失败的example,如果我成功了就发布它。尝试用重现问题;如果你成功了,.5.10是旧的,很可能这个错误已经被修复了。很抱歉-我去度假了。我会尝试最新版本,看看是否有帮助。不,我会尝试更新到最新的perl并报告。Carp钩住DB包。Worka圆形补丁(也在你给出的链接中的某个地方)。实际上,升级不会再触发Carp bug。升级到5.16.1或更高版本不一定能解决问题(参见leon的另一个答案)。
Bizarre copy of ARRAY in sassign at /usr/share/perl/5.10/Carp.pm line 182