Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка use lib '...' 
:(
    Опции темы
burakov
Дата 3.6.2013, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Добрый день, захотелось подключить единый каталог  для всех скриптов с самописными модулями
но захотелось это сделать через переменные. 
я добился того, (с помощью модуля 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'

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

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

спасибо



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Pfailed
Дата 4.6.2013, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Код

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




--------------------
PM MAIL   Вверх
DProf
Дата 6.6.2013, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: нет
Всего: 1



Естественно не работает, это же происходит на разных стадиях. Исполнения кода еще не происходит (и переменная соответственно еще не инициализирована) в тот момент когда 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://vingrad.com
PM MAIL   Вверх
Pfailed
Дата 6.6.2013, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



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


--------------------
PM MAIL   Вверх
DProf
Дата 7.6.2013, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: нет
Всего: 1



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

ответ:
Код

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


Цитата

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

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

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


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

Это сообщение отредактировал(а) DProf - 7.6.2013, 13:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1264 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.