Как вы используете переменную в lib Path?
Я хотел бы использовать переменную $var в пути lib.
my $var = "/home/usr/bibfile;"
use lib "$var/lib/";
Однако, когда я это делаю, это вызывает ошибку.
Я хотел бы использовать use lib "$var/lib/";
вместо use lib "/home/usr/bibfile/lib/";
.
Как я могу назначить переменную, чтобы ее можно было использовать в настройках модулей lib?
Ответы
Ответ 1
Переменные отлично работают при use lib
, ну, как и в любой строке. Однако, поскольку все директивы use
выполняются в блоке BEGIN
, ваша переменная еще не будет инициализирована в момент запуска use
, поэтому вам также необходимо поместить инициализацию в блок BEGIN
.
my $var;
BEGIN { $var = "/home/usr/bibfile"; }
use lib "$var/lib/";
use Data::Dumper;
print Dumper \@INC;
дает:
$VAR1 = [
'/home/usr/bibfile/lib/',
# ... more ...
];
Ответ 2
Не уверен, что вы пытаетесь выполнить, но похоже на задачу FindBin:: libs:
my $var;
BEGIN { $var = "/home/usr/bibfile" };
use FindBin::libs "Bin=$var", "base=lib";
Ответ 3
Вы не можете, потому что директива use
оценивается во время компиляции, тогда как другие переменные оцениваются во время выполнения.
Если ваша библиотека находится где-то по сравнению с исходным script, вы можете использовать стандартный модуль FindBin
:
# $Bin from FindBin is the directory of the original script
use FindBin;
use lib "$FindBin::Bin/path/to/bib";
use MyModule;