0

このことを考慮:

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

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

デバッガーが実行されると、 print にアクションを追加しようとしましたが、次のようになります$_

$ 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 $_、インタラクティブ モードで印刷しても、アクションとして使用するとエラーが発生します。

では、「dollar-underscore」のようなもの$_を、デバッグされた-pieスクリプトのアクションとして各ループを出力するにはどうすればよいでしょうか?

4

1 に答える 1