在 foreach 循环中死亡时未按良好顺序执行的行

Lines not executed in the good order while dying in foreach loop

我只是想了解一个奇怪的行为。

这是我的 perl 脚本,我只在其中检查是否存在某些文件夹:

#!/usr/bin/env perl
use warnings;

$root = "C:\Data\Tests";
@check = ("folder1", "folder2", "folder3");
foreach $check (@check){
    print $check;
    print -d "$root\$check" ? " OK\n" : die " NOK : not accessible";
}

现在,假设缺少 folder3,那么我应该得到输出:

folder1 OK
folder2 OK
folder3 NOK : not accessible at C:\Data\Tests\strange.pl line 8.

相反,我有:

folder1 OK
folder2 OK
 NOK : not accessible at C:\Data\Tests\strange.pl line 8.
folder3

所以看起来在最后一个循环中,第二行在第一行之前执行..

有人知道为什么吗?

您应该只使用一个打印语句,如下所示:

#!/usr/bin/env perl
use warnings;

$root = "C:\Data\Tests";
@check = ("folder1", "folder2", "folder3");
foreach $check (@check){
    print -d "$root\$check" ? "$check OK\n" : die "$check NOK : not accessible";
}

So it looks like in the last loop, the second line is executed before the first..

Someone knows why ?

die ".." 不像 printSTDERR

此外,输出会被缓冲,因此您可能想要禁用它以获得想要的输出,

STDOUT->autoflush();
STDERR->autoflush();