在 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 ".."
不像 print
去 STDERR
此外,输出会被缓冲,因此您可能想要禁用它以获得想要的输出,
STDOUT->autoflush();
STDERR->autoflush();
我只是想了解一个奇怪的行为。
这是我的 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 ".."
不像 print
去 STDERR
此外,输出会被缓冲,因此您可能想要禁用它以获得想要的输出,
STDOUT->autoflush();
STDERR->autoflush();