【问题标题】:Lines not executed in the good order while dying in foreach loop在 foreach 循环中死亡时未按良好顺序执行的行
【发布时间】: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

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

有人知道为什么吗?

【问题讨论】:

    标签: perl foreach die


    【解决方案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";
      }
      

      【讨论】:

      • 是的,它是这样工作的,但不能解释我遇到的奇怪行为:)
      猜你喜欢
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多