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


Автор: myth777 2.4.2009, 23:45
Всем доброй ночи.
Создал пакет, залил его в cgi-bin/lib/mlib.pm

не могу подключить свой путь в @ISA
делаю 
Код

unshift(@INC,  $ENV{DOCUMENT_ROOT}."/cgi-bin/lib/");
use mlib;

пишет
Код

Can't locate mlib.pm in @INC (@INC contains: C:/server/Perl/site/lib C:/server/Perl/lib .) at C:\Server\wwwroot\cgi-bin\test.pl line 7.
BEGIN failed--compilation aborted at C:\Server\wwwroot\cgi-bin\test.pl line 7.

Получается что 
Код

unshift(@INC,  $ENV{DOCUMENT_ROOT}."/cgi-bin/lib/");
 не срабатывает?
Как бороться?

Автор: tolkien 3.4.2009, 02:15
вы книжек чтоли не читаете? 

попробуйте так 
use lib qw(/cgi-bin/lib/);

Автор: pompei 3.4.2009, 06:34
Цитата(tolkien @ 3.4.2009,  02:15)
вы книжек чтоли не читаете? 

попробуйте так 
use lib qw(/cgi-bin/lib/);

точнее так
use lib "полный путь до /cgi-bin/lib";

ну или
use lib qw(полный путь до /cgi-bin/lib);

и ниже уже
use mlib;

Автор: myth777 3.4.2009, 16:29
Чтож  tolkien умный такой! Наверное не спрашивал бы если бы все так просто было бы. Для чего тогда форум нужен? Наверное для вапросов Вам не кажется так?
вобщем на 
Код

  use lib qw( "/cgi-bin/lib");
  #  use lib qw( "c:/server/wwwroot/cgi-bin/lib"); на это тоже дурниной орет
    use mlib;

получаем
Код

Can't locate mlib.pm in @INC (@INC contains: "/cgi-bin/lib" C:/server/Perl/site/lib C:/server/Perl/lib .) at C:\Server\wwwroot\cgi-bin\test.pl line 9.
BEGIN failed--compilation aborted at C:\Server\wwwroot\cgi-bin\test.pl line 9.


Добавлено через 2 минуты и 14 секунд
Да и полный путь я не могу указывать, так как на сервере другая структура какталогов.
Если можно относительный указать то как?
Такое
Код

  use lib $ENV{DOCUMENT_ROOT}."/cgi-bin/lib/");

компилятор не понимает..

Автор: myth777 3.4.2009, 16:45
Вобщем кому интересно как все же нужно подключать модули на стадии компиляции - 
Код

BEGIN { unshift(@INC, $ENV{DOCUMENT_ROOT}."/cgi-bin/lib/") }
  

А не 


вы книжек чтоли не читаете? 

попробуйте так 
use lib qw(/cgi-bin/lib/);

Автор: pompei 9.4.2009, 06:33
1) Проверьте есть ли у файла mlib.pm в конце 1;
2) Существует ли файл c:/server/wwwroot/cgi-bin/lib/mlib.pm

Добавлено через 1 минуту и 59 секунд
Цитата(myth777 @ 3.4.2009,  16:45)
Вобщем кому интересно как все же нужно подключать модули на стадии компиляции - 
Код

BEGIN { unshift(@INC, $ENV{DOCUMENT_ROOT}."/cgi-bin/lib/") }
  

А не 


вы книжек чтоли не читаете? 

попробуйте так 
use lib qw(/cgi-bin/lib/);

Ну если работает это, то вот это тоже будет работать
Код

use lib $ENV{DOCUMENT_ROOT}."/cgi-bin/lib/";

Только последнее является какбы более правильным, верней use lib специально придумали чтобы не нужно было пользоваться BEGIN-ом

Автор: sir_nuf_nuf 9.4.2009, 20:27
myth777, tolkie совершенно прав - подключать модули нужно именно через use  и use lib

А у вас не работало потому что вы писали
Код

use lib qw("blabla");

Здесь лишние кавычки, нужно так:
Код

use lib qw(blabla);


где blabla - абсолютный путь до директории из которой вы будите подключать модули.
конкретно вам нужно было написать

Код

use lib "$ENV{DOCUMENT_ROOT}/cgi-bin";
use mlib;


P.S. А форум - это не автоматическая справочная система, людям здесь интересно отвечать на интересные вопросы =)

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