Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > ошибка use lib '...'


Автор: burakov 3.6.2013, 22:45
Добрый день, захотелось подключить единый каталог  для всех скриптов с самописными модулями
но захотелось это сделать через переменные. 
я добился того, (с помощью модуля Cwd), чтобы путь был правильный реальный. (как тот, что заремарен в коде)

Код

use strict;
use warnings;
use Cwd qw (getcwd realpath);
my $libpath = getcwd (). '/../lib';  $libpath = realpath ($libpath);
print $libpath ."\n";
use lib $libpath;


# use lib 'D:/temp/work_Pinii/lib'; #реальный путь, прописанный ручками работает хорошо.





но с генерированным путем скрипт дает ошибку.
Empty compile time value given to use lib at D:\temp\work_Pinii\change\start1.pl line 9.

в то же время, как если прописать вручную
use lib 'D:/temp/work_Pinii/lib'

то все нормально.

подскажите. как подключить свой каталог с модулями, при помощи переменной?
почему выдается эта странная ошибка?

спасибо

Автор: Pfailed 4.6.2013, 10:01
Код

use FindBin;
use lib "$FindBin::Bin/../lib";


Автор: DProf 6.6.2013, 16:52
Естественно не работает, это же происходит на разных стадиях. Исполнения кода еще не происходит (и переменная соответственно еще не инициализирована) в тот момент когда use lib вызывается.
Подробнее о жизненном цикле программ на Perl в Главе 18 Программирование на Perl.

А если указать самый простой путь, то это завернуть нужный код в блок BEGIN - если его Perl встречает, то тут же и исполняет (до компиляции оставшейся части кода).
Код

BEGIN
{
    our $libpath = 'path';
};
BEGIN
{
    our $libpath; #if work strict for suppression of errors
    use lib $libpath;
};

#check:
print "Perl find path at: @INC";


Pfailed, а я что то не понял, причем здесь модуль use FindBin - это же
Цитата

   FindBin - Locate directory of original perl script
   


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51acf2f76ccc19fd7b000002#findElement_E7045_51b094296ccc191623000d24_0

Автор: Pfailed 6.6.2013, 20:46
DProf, при том, что делая getcwd () автор как раз и пытается "Locate directory of original perl script".
На правах телепатии.

Автор: DProf 7.6.2013, 13:53
Да, понял. Но вопрос же более общий был - 
Цитата
как подключить свой каталог с модулями, при помощи переменной
    

ответ:
Код

BEGIN
{
    my $lib = '\user_perl_lib';
    push @INC, $lib;
}


Цитата

  почему выдается эта странная ошибка?
  

ответ:
Цитата

  Исполнения кода еще не происходит (и переменная соответственно еще не инициализирована) в тот момент когда use lib вызывается.
  


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51acf2f76ccc19fd7b000002#findElement_E7045_51b1bb8e6ccc19003f001701_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)