Почему “не использует lib”, вступают в силу таким образом?

Если это записано в.NET и скомпилировано в CIL, это может быть отражено. Если безопасность является беспокойством, и путаницы нужно избежать, то я рекомендую писать Ваше приложение с помощью неуправляемого языка, который является должным, по своей природе, тяжелее перепроектировать.

5
задан Brad Gilbert 18 August 2009 в 18:47
поделиться

3 ответа

использование происходит во время компиляции, а не во время выполнения, поэтому ваша переменная еще не установлена. Вы можете сделать:

my $curr_lib;
BEGIN {
    $curr_lib = $0;
    $curr_lib =~ s/myapp\.pl/libx/;
}    
use lib $curr_lib;

или:

use FindBin;
use lib "$FindBin::Bin/libx";
15
ответ дан 18 December 2019 в 09:08
поделиться

У меня тоже были проблемы с этим раньше. Происходит то, что Perl выполняет два прохода по вашему коду: один раз для его компиляции, а второй - для его запуска. В вашем примере строки 4,5 и 6 не выполняются до времени выполнения, но использование вступает в силу во время компиляции.

Одна из возможностей - поместить все это в блок BEGIN {} , который заставит код выполняться во время компиляции. Я сделал это, но это грязно / некрасиво. (Кстати, вместо $ 0 вам нужно использовать $ ARGV [0] в Perl).

Лучший способ указать Perl, где брать библиотеки, - это использовать -I флаг. Вы можете поместить его в строку #! , или, если вы запускаете скрипт из другого скрипта,

2
ответ дан 18 December 2019 в 09:08
поделиться

use xxx - это директива времени компиляции , а не инструкция времени выполнения. Вы не можете установить его программно в запущенном вами сценарии.

Возможно, вам придется попробовать требовать, а не использовать

Если вам нужно использовать , вам нужно установить $ Переменная среды PERL5LIB , чтобы убедиться, что ваши модули правильно расположены и используются, или измените строку shebang на #! / usr / local / perl -w -I / путь / к / libx . Существуют и другие методы ( local :: lib и т.д.), но из вашего вопроса кажется, что ваш контроль над установкой немного ограничен для такого подхода.

1
ответ дан 18 December 2019 в 09:08
поделиться
Другие вопросы по тегам:

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