2012-07-22 16 views
1

eval中尝试使用die时,我遇到了一个恼人的问题。鲤鱼:在sassign ARRAY的奇异副本。任何修复?

的代码如下;

$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"[email protected]所以它提供的eval退出时。

然而,可替换Carp.pm死了,我想在某处的die的内部与

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

放眼望去有一些建议,有一个bug深有关堆栈的Perl在死亡期间(例如,http://code.activestate.com/lists/perl5-porters/149248/),但是我担心在这一点上我处于我对perl知识的极限,我不确定这是否相关,或者如果是这样的话该怎么办。 :(

有没有人知道是否有解决此问题的方法或另一种方式从eval传回错误字符串,或者如果我正确读取此错误?

+0

你能提供一个工作的例子吗? – perreal 2012-07-22 10:52:35

+0

我试过把代码放到一个例子中,但它工作正常,这导致我认为这是与我引用的文章有关。当时我想我可能会有一个旧版本的鲤鱼,但是这是最新的。如果我有成功的话,我会继续尝试找出一个失败的例子并发布。 – mark 2012-07-22 11:41:07

+0

尝试用[当前稳定版本](http://www.perl.org/get.html)重现问题;如果你成功了,[提交bug](http://p3rl.org/bug)。你的5.10版本比较旧,[不支持](http://perldoc.perl.org/perlpolicy.html#MAINTENANCE-AND-SUPPORT),这个bug已经被修正了。 – daxim 2012-07-22 17:02:26

回答

1

原来这是我使用的Perl版本的问题。 升级到5.16.1解决了问题。

+0

不是,升级只是不会触发鲤鱼的错误了。升级到5.16.1或更新版本并不一定能够解决问题(参见leon在http://stackoverflow.com/a/11603591/1905491上的其他答案)。 – stefanct 2016-07-21 14:00:29

1

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

+0

不,我会尝试更新到最新的perl并回报。 – mark 2012-08-05 19:24:16

+1

鲤鱼钩到DB包中。解决方法补丁[这里](http://www.perlmonks.org/index.pl?node_id=969714)(也是埋在你给的链接中的某处)。 – runrig 2012-12-20 21:36:50