foreach 循环中的打印功能:我的标量和文本不打印
Print function in a foreach loop : my scalar and text does not print
这是我的代码的摘录:
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 的迭代结果是(代码隐藏在这里,但是是字母数字):
HERE IS PAR****
n'a pas été trouvé
我不明白为什么第二次打印(在 if 序列中)不打印整行。我猜是存在缓冲问题,但我找不到发生了什么事。
如有任何帮助,我们将不胜感激。
我怀疑您的第二个数据项包含退格符 (BS) 或回车 return (CR)。所以
- 您的第一项运行并且
print
第一次出现,但由于 code_found=1
它没有进入 if
。
- 您的第二个项目运行,数据中的 CR 或 BS 掩盖了
HERE IS
已打印的事实
- 你的第二个项目没有找到代码,所以第二个
print
发生了,它的第一部分被你变量中相同的 CR 或 BS 序列覆盖
确认这一点的简单方法是重定向您的输出并像这样查看它:
script > check.log
vim check.log
您应该会在其中看到额外的数据。 less
也可以代替 vim
。
据推测,$nouveau_code
来自 Windows 系统上的文件,而您正在 Linux 上处理它?
如果你在这种情况下使用 chomp
那么它会删除尾随的换行符,但不会删除回车符 return,并且打印该值会将屏幕光标重置为行首在打印其他内容之前
简单的修复方法是将 chomp
替换为 s/\R//
,这将删除行尾的 CR 和 LF
这是我的代码的摘录:
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 的迭代结果是(代码隐藏在这里,但是是字母数字):
HERE IS PAR****
n'a pas été trouvé
我不明白为什么第二次打印(在 if 序列中)不打印整行。我猜是存在缓冲问题,但我找不到发生了什么事。
如有任何帮助,我们将不胜感激。
我怀疑您的第二个数据项包含退格符 (BS) 或回车 return (CR)。所以
- 您的第一项运行并且
print
第一次出现,但由于code_found=1
它没有进入if
。 - 您的第二个项目运行,数据中的 CR 或 BS 掩盖了
HERE IS
已打印的事实 - 你的第二个项目没有找到代码,所以第二个
print
发生了,它的第一部分被你变量中相同的 CR 或 BS 序列覆盖
确认这一点的简单方法是重定向您的输出并像这样查看它:
script > check.log
vim check.log
您应该会在其中看到额外的数据。 less
也可以代替 vim
。
据推测,$nouveau_code
来自 Windows 系统上的文件,而您正在 Linux 上处理它?
如果你在这种情况下使用 chomp
那么它会删除尾随的换行符,但不会删除回车符 return,并且打印该值会将屏幕光标重置为行首在打印其他内容之前
简单的修复方法是将 chomp
替换为 s/\R//
,这将删除行尾的 CR 和 LF