Карп: Странная копия 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. Используете ли вы какой-либо модуль, который подключается к отладчику, который может быть виновником?

Другие вопросы по тегам