traceback модуль довольно полезен для форматирования tracebacks. Можно тогда записать его в файл журнала.
Этот код будет работать во всех ситуациях, а также выполняет загрузку во время компиляции, поскольку от него могут зависеть другие создаваемые вами модули:
BEGIN {
if ($^O eq "MSWin32")
{
require Module;
Module->import(); # assuming you would not be passing arguments to "use Module"
}
}
Это потому, что использует Module (qw (foo bar))
эквивалентно BEGIN {require Module; Модуль-> импорт (qw (foo bar)); }
как описано в perldoc -f use .
(EDIT, несколько лет спустя ...)
Это даже лучше:
use if $^O eq "MSWin32", Module;
Подробнее о if
прагма здесь .
В качестве ярлыка для последовательности:
BEGIN {
if ($^O eq "MSWin32")
{
require Win32;
Win32::->import(); # or ...->import( your-args ); if you passed import arguments to use Win32
}
}
вы можете использовать директиву if:
use if $^O eq "MSWin32", "Win32"; # or ..."Win32", your-args;
Как правило, использовать модуль
или использовать СПИСОК модулей
оцениваются во время компиляции независимо от того, где они появляются в коде. Эквивалент времени выполнения:
require Module;
Module->import(LIST)
требуется модуль;
Но использование
также вызывает импорт
, требует
- нет. Итак, если модуль экспортируется в пространство имен по умолчанию, вы также должны вызвать
import Module qw (stuff_to_import)
;
Вы также можете eval "использовать модуль"
- который отлично работает, если IF perl может найти правильный путь во время выполнения.