在foreach循环中死亡时,行没有以良好的顺序执行

Luc*_*ien 3 perl foreach die

我只是有一种我想理解的奇怪行为.

这是我的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";
}
Run Code Online (Sandbox Code Playgroud)

现在,假设folder3丢失了,所以我应该输出:

folder1 OK
folder2 OK
folder3 NOK : not accessible at C:\Data\Tests\strange.pl line 8.
Run Code Online (Sandbox Code Playgroud)

相反,我有:

folder1 OK
folder2 OK
 NOK : not accessible at C:\Data\Tests\strange.pl line 8.
folder3
Run Code Online (Sandbox Code Playgroud)

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

有人知道为什么吗?

Сух*_*й27 11

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

有人知道为什么吗?

die ".."不像printSTDERR

此外,输出是缓冲的,因此您可能希望禁用它以获得所需的输出,

STDOUT->autoflush();
STDERR->autoflush();
Run Code Online (Sandbox Code Playgroud)