Ошибка сегментации в pdl2 с некоторым кодом из моего .perldlrc, который работает нормально прямо из оболочки pdl2 - PullRequest
1 голос
/ 09 июля 2011

объединение

Есть ли эквивалент в отладчике perl 'x' в pdl2 (или Devel :: REPL)?

и

Как я могу перечислить все переменные, которые находятся в данной области видимости?

Я создал свой perldlrc как

use feature ':5.10';
use Data::Dumper;
use PadWalker qw/peek_our peek_my/;


sub x {
  my $depth = shift||0;

  $Data::Dumper::Maxdepth = $depth;
  print Data::Dumper->Dump([@_])
}


sub lvars {
    my $vars = in_scope_variables();

    print Dumper [keys %$vars];
}

sub in_scope_variables {
    my %in_scope = %{peek_our(1)};
    my $lexical  = peek_my(1);
    for my $name (keys %main::) {
        my $glob = $main::{$name};
        if (defined ${$glob}) {
            $in_scope{'$' . $name} = ${$glob};
        }

        if ( @{$glob}) {
            $in_scope{'@' . $name} = [@{$glob}];
        }

        if (%{$glob}) {
            $in_scope{'%' . $name} = {%{$glob}};
        }
    }

    #lexicals hide package variables
    while (my ($var, $ref) = each %$lexical) {
        $in_scope{$var} = $ref;
    }
    return \%in_scope;
}

Затем я запускаю pdl2, но методы не работают:

$ pdl2
pdl> $xx=in_scope_variables()
Runtime error: You can't FIRSTKEY with the %~ hash at (eval 254) line 38

pdl> lvars
Segmentation fault

Если я прокомментировал цикл

# for my $name (keys %main::) {
#     [...]
# }

Тогда произойдет сбой только lvars:

pdl> $xx=in_scope_variables()
pdl> lvars                   
Segmentation fault

Но если я запускаю код непосредственно в оболочке pdl2, этоработает

pdl> $xx=in_scope_variables()
pdl> x 1, $xx        
$VAR1 = {
          '$_REPL' => 'REF(0x19999708)'
        };
pdl> print Dumper [keys %$xx];  
$VAR1 = [
          '$_REPL'
        ];

У кого-нибудь есть идеи, почему эти две ошибки происходят?

Это проблема pdl2, проблема Devel :: REPL или я делаю что-то глупое?

Я использую Perl 5.12 и Perldl2 Shell v0.005

1 Ответ

1 голос
/ 09 июля 2011
  • РЕШЕНО ошибка сегментации:

Я обновил свою годовую версию PadWalker и теперь с PadWalker-1.92 работает нормально.

К сожалению, я не записывал свою версию перед обновлением, поэтому я не могу сообщить, с какой версией у меня были проблемы.

  • Все еще ожидает ошибки при захвате %main:: переменных:

    Ошибка времени выполнения: вы не можете FIRSTKEY с хешем% ~ в (eval 254) строке 38

...