-3
  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>

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

4

1 回答 1

7

哦,是的。问题是您正在向屏幕发送回车。它可能落后于数组中的前一个元素。

$ perl -e'print "abc", "def\r", "ghi", "\n";'
ghidef

您可能在非 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
于 2013-02-09T04:15:34.930 回答