2015-08-03 3 views
3

У меня просто странное поведение, которое я хотел бы понять.Линии, не выполненные в хорошем состоянии, когда они умирают в петле foreach

Вот мой 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 

Так выглядит, как в последнем цикле, вторая строка выполняется до первый ..

Кто-нибудь знает почему?

ответ

11

Так выглядит как в последнем цикле, вторая строка выполняется перед первым ..

Кто знает, почему ?

die ".."print в отличие идет в STDERR

Кроме вывода буферизованного, так что вы можете отключить его для того, чтобы получить желаемое, выход

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

Вы должны использовать только один оператор печати, например:

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

Да она работает таким образом, но не объясните поведение, которое я переживаю :) – Lucien

 Смежные вопросы

  • Нет связанных вопросов^_^