Карп: Странная копия ARRAY в sassign. Какие-нибудь исправления?
Я страдаю от раздражающей проблемы при попытке 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 существует ошибка, связанная со стеком во время die (например, http://code.activestate.com/lists/perl5-porters/149248/), однако я боюсь, что на этом Дело в том, что я нахожусь на пределе своих знаний Perl, и я не уверен, что это актуально, или что с этим делать, если это так. :(
Кто-нибудь знает, есть ли способ обойти эту проблему или другой способ передать строку ошибки из eval
или если я читаю это неправильно?
2 ответа
Это оказалось проблемой с версией Perl, которую я использовал. Обновление до 5.16.1 решило проблему.
Это звучит для меня как # 52610. Используете ли вы какой-либо модуль, который подключается к отладчику, который может быть виновником?