Perl String Compare失败

时间:2017-08-18 10:32:22

标签: string perl compare

以下是代码示例:

while (@filelines){
  #splice the line to a array 
  print "the string to be compared is $filelines[$i] with $FN_Accessories_Header\n";

  if (chomp($filelines[$i]) eq $FN_Accessories_Header){
    print "The file name is FN_Accessories.csv and first line is header\n";
  }
  else {
    print "The scanning process will be terminated as the first line is not header\n";
    exit;
  }
}

两个变量的内容相同,但if语句中的print不会执行。

asd_bsd;asdf_asdf;weroi_asdf;asdf_asdf;asdf_wer;rty_tyu;sdf_erty;qwe_123;asdffff_asdfrs;

3 个答案:

答案 0 :(得分:6)

chomp不返回缩短的字符串,它返回删除的字符数。

chomp @filelines;
for my $line (@filelines) {
    if ($line eq $FN_Accessories_Header) {
    ...

答案 1 :(得分:3)

  • while (@filelines)将始终为真,除非您从循环中删除@filelines中的元素(您不会这样做)。
  • 您没有做任何事情来改变循环中的$i,因此$filelines[$i]将始终是相同的字符串。那可能不是你想要的。
  • chomp()返回一个布尔值(无论是否从字符串中删除换行符)。因此,将其返回值与另一个字符串进行比较不太可能有用。 更新: choroba在评论中指出(正确)chomp()返回一个更有用的值,在很多情况下可以解释为布尔值。有关详细信息,请参阅documentation for chomp()

这三个错误的某些组合导致了您的问题。

答案 2 :(得分:1)

尝试perl debug,下面的命令可以帮助你。然后你可以现场比较两个字符串,看看是什么了

perl -d ./yourscript
b <LINENUMBER>
L
c
print "--".$filelines[$i]."--"
print "--".$FN_Accessories_Header."--"

上面的关键b&#34;断点&#34; ,L&#34;列出断点&#34; ,c&#34;继续断点&#34;,打印&#34;打印&#34;