在die
内尝试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
的内部与
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
传回错误字符串的其他方法,或者我是否正在错误地阅读?
答案 0 :(得分:1)
这听起来像#52610。您是否正在使用任何可能成为调试器的模块?
答案 1 :(得分:1)
这对我使用的Perl版本来说是一个问题。 升级到5.16.1解决了这个问题。