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

时间:2015-08-03 09:24:11

标签: 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";
}

现在,假设缺少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

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

有人知道为什么吗?

2 个答案:

答案 0 :(得分:11)

  

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

     

有人知道为什么吗?

die ".."不同的

print转到STDERR

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

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

答案 1 :(得分:0)

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

jQuery(document).ready(function ($) {   

   update_data(); 

   function update_data() {
       $.ajax({
          type: "POST",
          url: "$URL",
          data: {update_current_time:1},
          success: function(response){
            setTimeout(update_data, 5000);
          },
          error: function(){
            setTimeout(update_data, 5000);
          }
       });
   }
});