2014-01-20 4 views
-3

Тривиальный вопрос о встроенных индикаторах ошибок Perl $! и $ @. Как они отличаются друг от друга и что лучше для целей каротажа?

+3

Это разные вещи. 'perldoc perlvar' для получения дополнительной информации. Используйте любую информацию, которая вам понадобится (мы не можем догадаться, что это может быть). –

ответ

2

У них совершенно разные цели. Что вы должны регистрировать, зависит от того, что не удалось. (И не забудьте также $?).

Прочитайте документацию по адресу http://perldoc.perl.org/perlvar.html#Error-Variables.

5

$! устанавливается системными вызовами при ошибке. Он соответствует переменной C errno.

[email protected]: eval EXPR и eval BLOCK. Он содержит исключенное пойманное исключение.

$? устанавливается waitpid, system и close (при закрытии ручки открыт с open '-|' или open '|-'). Он содержит информацию о завершенном процессе.

Большинство модулей генерируют исключения при ошибке, но некоторые устанавливают свои собственные переменные ошибки (например, DBI, Text :: CSV_XS).

Соответствующая переменная для журнала зависит от того, что вы регистрируете.

Например, system сообщает об ошибках через $? и $!.

system(...); 
die("Unable to execute child: $!\n")    if $? < 0; 
die("Child killed by signal ".($? & 0x7F)."\n") if $? & 0x7F; 
die("Child exited with error ".($? >> 8)."\n") if $? >> 8; 
Смежные вопросы