Как правильно обрабатывать ошибки в Perl - PullRequest
1 голос
/ 22 июля 2011

Я пытаюсь предотвратить закрытие моей командной строки при ошибке при открытии файла.Я уже попробовал команду die, но она закрывает командную строку сразу после отображения сообщения.Я хочу иметь возможность напечатать сообщение об ошибке, подождать несколько секунд, затем закрыть или выйти.Прямо сейчас я могу заставить код ждать перед закрытием приглашения, но он никогда не отображает мое сообщение об ошибке:

open (LOG1, $file1) || (print "\n# Error in opening $file1, make sure it exists! #\n", sleep(3), exit);

Ответы [ 3 ]

6 голосов
/ 22 июля 2011

Вы неправильно используете оператор запятой - print печатает не сообщение об ошибке, а возвращаемое значение exit()!Вместо этого используйте точки с запятой.

3 голосов
/ 22 июля 2011

Я думаю, что вы разрабатываете с использованием системы Windows. Если это так, вы можете попробовать добавить следующий код в ваш скрипт, который будет отображать: «Нажмите любую клавишу, чтобы продолжить ...» непосредственно перед выходом из скрипта.

END { system 'pause' }
2 голосов
/ 22 июля 2011

Я подозреваю, что sleep не очищает буфер вывода, так что это может объяснить, почему вы не видите ничего распечатанного; Вы можете попробовать:

open (LOG1, $file1) || ((print "\n# Error in opening $file1, make sure it exists! #\n"), $|++, sleep(3), exit);

В любом случае мне кажется, что было бы намного предпочтительнее определить dieAfterDelay функцию, подобную этой:

sub dieAfterDelay {
    my $msg = shift;
    my $delay = shift;
    my $errNo = shift;
    print $msg . "\n", $|++;
    sleep($delay);
    exit($errNo);
}

что вы можете использовать следующим образом:

open (LOG1, $file1) || dieAfterDelay("\n# Error in opening $file1, make sure it exists! #\n", 3, -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...