在 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循环的正确顺序的简单方法?