Действия Perl-отладчика в однострочном режиме -pie?

Учти это:

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 ответ

Получил через Как запустить команду `x` внутри <действия в отладчике perl?, его { 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'"
Другие вопросы по тегам