perl - 推送不附加到数组的末尾

-3 perl

  DB<2> n
  main::(/home/repsa/temper.pl:84):  my $tttdiskhumber=$myTemprecord[-1];
   DB<2> n
  main::(/home/repsa/temper.pl:87):  push(@myMainrecord,$tttdiskhumber);
   DB<2> p @myMainrecord
   t2agvio701vhost03t2adsap7011
   DB<3> p $tttdiskhumber
  hdisk6
   DB<4> n
   main::(/home/repsa/temper.pl:88): @myTemprecord=();
    DB<4> p @myMainrecord
    hdisk6o701vhost03t2adsap7011
   DB<5>
Run Code Online (Sandbox Code Playgroud)

为什么我的最后一次推送没有附加到数组的末尾?任何帮助表示赞赏....

ike*_*ami 7

哦,是的.问题是你正在向屏幕发送回车.它可能跟踪数组中的前一个元素.

$ perl -e'print "abc", "def\r", "ghi", "\n";'
ghidef
Run Code Online (Sandbox Code Playgroud)

您可能在非Windows系统上读取Windows文本文件而未事先(使用dos2unix)或在读取文件时(通过使用s/\s+\z//;而不是chomp;)转换行结尾.


正如jordanm在评论中建议的那样,调试器的x命令会告诉你你有什么比这更好p.

$ perl -d

Loading DB routines from perl5db.pl version 1.33
Editor support available.

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

my @a = ("abc", "def\r", "ghi");
1;
^D
main::(-:1):    my @a = ("abc", "def\r", "ghi");
  DB<1> s
main::(-:2):    1;
  DB<1> p @a
ghidef
  DB<2> x @a
0  'abc'
1  "def\cM"
2  'ghi'
  DB<3> q
Run Code Online (Sandbox Code Playgroud)