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