Строки, которые не выполняются в хорошем состоянии, когда они умирают в цикле foreach

89
8

У меня просто странное поведение, которое я хотел бы понять.


Вот мой perl script, где я просто проверяю наличие нескольких папок:


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

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


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

спросил(а) 2021-01-27T17:40:03+03:00 5 месяцев, 4 недели назад
1
Решение
154

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

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



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

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


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

ответил(а) 2021-01-27T17:40:03+03:00 5 месяцев, 4 недели назад
45

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

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

ответил(а) 2021-01-27T17:40:03+03:00 5 месяцев, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема