2016-12-17 2 views
0

이 고려 :-pie one-liner 모드의 Perl 디버거 작업?

cat > mytestfile.txt <<'EOF' 
    "'iceberg'" 
    "'ice cliff'" 
    "'ice field'" 
    "'inlet'" 
    "'island'" 
    "'islet'" 
    "'isthmus'" 
EOF 

perl -dpi -e 's/ice/dice/' mytestfile.txt 

디버거가 실행되면, 내가 $_를 인쇄 할 작업을 추가하려고하지만 :

$ perl -dpi -e 's/ice/dice/' mytestfile.txt 

Loading DB routines from perl5db.pl version 1.39_10 
Editor support available. 

Enter h or 'h h' for help, or 'man perldebug' for more help. 

main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
    DB<1> n 
main::(-e:1): s/ice/dice/ 
    DB<1> n 
main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
    DB<1> print $_ 

    DB<2> n 
main::(-e:1): s/ice/dice/ 
    DB<2> print $_ 

    DB<3> n 
main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
    DB<3> p $_ 
    "'ddiceberg'" 

    DB<4> print "$_" 

... 
    DB<1> a 0 print "$_"; 
    DB<2> L 
    DB<3> L a 
    DB<4> n 
... 
    DB<6> a 1 print "$_" 
    DB<7> L a 
-e: 
1: s/ice/dice/ 
    action: print "$_" 
    DB<8> n 
main::(-e:1): s/ice/dice/ 
    DB<8> n 
main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
    DB<8> n 
main::(-e:1): s/ice/dice/ 
    DB<8> n 
main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
    DB<8> n 
... 
    DB<8> a 1 p $_ 
    DB<9> L a 
-e: 
1: s/ice/dice/ 
    action: p $_ 
    DB<10> n 
main::(-e:1): s/ice/dice/ 
Can't locate object method "p" via package " "'ice cliff'" 
" (perhaps you forgot to load " "'ice cliff'" 
"?) at (eval 13)[/usr/share/perl/5.18/perl5db.pl:732] line 1, <> line 3. 
    DB<10> n 
main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
Can't locate object method "p" via package " "'dice cliff'" 
" (perhaps you forgot to load " "'dice cliff'" 
"?) at (eval 14)[/usr/share/perl/5.18/perl5db.pl:732] line 1, <> line 3. 

...가 문제 :

  • 하는 경우를 내가 print $_ 할 빈 문자열을 얻을 - 만약 내가 p $_, 나는 실제 출력을 변수의 얻을
  • 라인 0에 액션을 추가 할 수 없습니다.
  • 라인 1에서 액션이 실행됩니다. - 언급 한대로 빈 문자열을 반환하므로 액션으로 print $_이 사용 된 경우 액션이 실행됩니다. 그러나 p $_ 대화 형 모드로 인쇄하더라도 작업으로 사용하면 오류가 발생합니다.

그래서 어떻게 디버깅 -pie 스크립트의 작업으로 각 루프를 인쇄 "달러 밑줄"$_ 같은 뭔가를 할 수 있습니까?

답변

1

How to run `x` command within a < action in the perl debugger? 통해있어, 그것은 { p $_입니다 :

DB<1> { p $_ 
    DB<2> n 
main::(-e:1): s/ice/dice/ 
auto(-1) DB<2> p $_ 
    "'iceberg'" 

    DB<3> n 
main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
auto(-1) DB<3> p $_ 
    "'diceberg'" 

    DB<4> n 
main::(-e:1): s/ice/dice/ 
auto(-1) DB<4> p $_ 
    "'ice cliff'" 

    DB<5> n 
main::(-e:0): BEGIN { require 'perl5db.pl' };LINE: while (<>) { 
auto(-1) DB<5> p $_ 
    "'dice cliff'"