以下是代码示例:
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;
答案 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;