当我试图从eval
中调用die
时,遇到了一个烦人的问题。
代码如下:;
$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
内部的某个地方
Bizarre copy of ARRAY in sassign at /usr/share/perl/5.10/Carp.pm line 182
环顾四周,有一些迹象表明perl中存在一个与die期间的堆栈有关的深层错误(例如。http://code.activestate.com/lists/perl5-porters/149248/),但是,我担心目前我对perl的了解已经到了极限,我不确定这是否相关,或者如果相关该怎么办。:(
有人知道是否有办法解决这个问题,或者是否有其他方法从eval
返回错误字符串,或者我是否读错了?
这听起来像#52610。您是否使用了任何挂接调试器的模块,这可能是罪魁祸首?
这是我使用的Perl版本的问题。升级到5.16.1解决了问题。