这是我的代码摘录:
foreach my $nouveau_code (@tableau_codes_utilises) {
my $code_found = 0;
foreach my $ligne_code_prospect (@tableau_liste_codes_prospects) {
//SOME CODE
}
print "HERE IS $nouveau_code\n";
if ( $code_found == 0 ) {
print "le code $nouveau_code n'a pas été trouvé\n";
STDOUT->autoflush;
}
}
$code_found
等于0的迭代结果是(代码隐藏在这里,但是是字母数字):
这是PAR ****
n'apasététrouvé
我不明白为什么第二次打印(在if序列中)不打印整行。我想有一个缓冲问题,但我找不到发生了什么。
任何帮助都将不胜感激。
答案 0 :(得分:3)
猜测一下,$nouveau_code
来自一个源自Windows系统的文件,你是在Linux上处理它吗?
如果你在这种情况下使用chomp
那么它将删除尾随换行符,但不会删除回车符,并且打印该值会在打印任何其他内容之前将屏幕光标重置为行的开头
简单的解决方法是将chomp
替换为s/\R//
,这将删除CR以及行尾的LF
答案 1 :(得分:1)
我怀疑这里发生的事情是你的第二个数据项包含退格(BS)或回车(CR)。所以
print
第一次运行,但自code_found=1
以来它没有进入if
。HERE IS
被打印的事实print
发生,并且其第一部分被变量中的相同CR或BS序列覆盖确认这一点的简单方法是重定向输出并按如下方式查看:
script > check.log
vim check.log
你应该看到那里的额外数据。 less
代替vim
也可以正常工作。