проблема пути инструмента решетки - PullRequest
4 голосов
/ 31 января 2012

Я скачал и установил инструмент perl (lattice-tool). Но это в моем локальном каталоге. Пока я работаю, он говорит, что не может найти Directed.pm (файл lib), который находится в папке lib моего локального каталога. Я надеюсь, что это будет правильно, если я установлю переменную пути. Если да, то как мне его установить?

Ответы [ 4 ]

2 голосов
/ 31 января 2012

Для использования lib вы должны использовать полный путь, и вы не должны использовать релятивный путь как этот.

use '../lib';#not working in all times.

Сценарий: ваши сценарии находятся в чем-то / bin / prog.pl, ваша библиотека - что-то в / lib / lib.pm.

Если вы используете релятивный путь, вы должны назвать свою программу следующим образом:

cd something/bin/ && ./prog.pl

Если вы хотите использовать релятивный путь, используйте FindBin, чтобы найти ваш текущий путь:

use FindBin;
use lib "$FindBin::Bin/../lib";#your lib realitv to your script
use lib $FindBin::Bin;#your current script full path

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

cd ~   
something/bin/prog.pl# ti will use the correct lib
1 голос
/ 31 января 2012

В моих сценариях у меня есть следующее (которое, я уверен, может быть улучшено, но пока оно работает):

my $mydir;  BEGIN { ($mydir) = ($0 =~ m#(.*)[/\\]#) or $mydir = '.'; }
use lib "$mydir/lib";

Таким образом, сценарий пытается определить свой собственный каталог и затем сообщаетPerl для поиска библиотек в подкаталоге lib этого каталога.

0 голосов
/ 31 января 2012

Использование lib :

use lib 'lib';

lib также проверяет подкаталоги, специфичные для архитектуры, под lib, чтобы убедиться, что загружаются машинно-зависимые библиотеки.

РЕДАКТИРОВАТЬ: Обратите внимание, что каталоги, переданные в lib, относятся к вашему текущему рабочему каталогу, поэтому, если вы хотите выполнить свой скрипт из другого места, вы должны использовать use lib '/home/user1126070/lib'.

С perlvar :

The array @INC contains the list of places that the do EXPR , require, or use
constructs look for their library files. It initially consists of the arguments
to any -I command-line switches, followed by the default Perl library, probably
/usr/local/lib/perl, followed by ".", to represent the current directory. ("."
will not be appended if taint checks are enabled, either by -T or by -t .) If you
need to modify this at runtime, you should use the use lib pragma to get the
machine-dependent library properly loaded [...]
0 голосов
/ 31 января 2012

Вам необходимо добавить 'lib' в каталоги, которые ищет perl для модулей. Вы можете сделать это с флагом -I:

 perl -Ilib lattice-tool.pl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...