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

Posted

技术标签:

【中文标题】在 foreach 循环中死亡时未按良好顺序执行的行【英文标题】:Lines not executed in the good order while dying in foreach loop 【发布时间】:2015-10-25 08:26:29 【问题描述】:

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

这是我的 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";

现在,假设文件夹 3 丢失,所以我应该有输出:

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

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

有人知道为什么吗?

【问题讨论】:

【参考方案1】:

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

有人知道为什么吗?

die ".." 不像 print 转到 STDERR

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

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

【讨论】:

【参考方案2】:

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

#!/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";

【讨论】:

是的,它是这样工作的,但不能解释我遇到的奇怪行为:)

以上是关于在 foreach 循环中死亡时未按良好顺序执行的行的主要内容,如果未能解决你的问题,请参考以下文章

立方体在旋转时未按预期呈现

sec:authorize 在 Spring 启动应用程序中使用 Thymeleaf 时未按预期工作

Firebase云功能Firestore触发onWrite在本地测试时未按预期运行

在Javascript中确保forEach / for循环的正确顺序的简单方法?

队列ForEach循环抛出InvalidOperationException

Firebase 查询未按正确顺序执行?