Как я условно использую модуль Perl, только если я нахожусь в Windows?

traceback модуль довольно полезен для форматирования tracebacks. Можно тогда записать его в файл журнала.

9
задан brian d foy 18 September 2009 в 15:23
поделиться

4 ответа

Этот код будет работать во всех ситуациях, а также выполняет загрузку во время компиляции, поскольку от него могут зависеть другие создаваемые вами модули:

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 прагма здесь .

21
ответ дан 4 December 2019 в 06:35
поделиться

В качестве ярлыка для последовательности:

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;
11
ответ дан 4 December 2019 в 06:35
поделиться

Как правило, использовать модуль или использовать СПИСОК модулей оцениваются во время компиляции независимо от того, где они появляются в коде. Эквивалент времени выполнения:

require Module;
Module->import(LIST)
3
ответ дан 4 December 2019 в 06:35
поделиться

требуется модуль;

Но использование также вызывает импорт , требует - нет. Итак, если модуль экспортируется в пространство имен по умолчанию, вы также должны вызвать

import Module qw (stuff_to_import) ;

Вы также можете eval "использовать модуль" - который отлично работает, если IF perl может найти правильный путь во время выполнения.

1
ответ дан 4 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: