как отредактировать запись @INC, чтобы включить новый каталог для модулей - PullRequest
2 голосов
/ 01 апреля 2012

Мне было интересно, как я могу добавить новый каталог в моих настройках Perl, чтобы также искать модули для включения?

Когда я запускаю эту строку:

perl -w /var/www/cgi-bin/upload.cgi

Я получаю следующую ошибку:

Can't locate config.pm in @INC (@INC contains: . /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8) at /var/www/cgi-bin/upload.cgi line 5.
BEGIN failed--compilation aborted at /var/www/cgi-bin/upload.cgi line 5.

И я искал в Google, и, очевидно, мне следует включить /var/www/cgi-bin в качестве папки, чтобы Perl мог найти ее и включить.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

вот несколько верхних строчек программы:

use strict;
use lib '.';
use XFSConfig; #this was fixed by using -I command line switch
use XUpload; # this returns as an error!!!
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use LWP::UserAgent;

Ответы [ 3 ]

5 голосов
/ 01 апреля 2012

Есть несколько способов, многие из которых описаны в perlfaq8: Как добавить каталог к ​​моему пути включения во время выполнения?

1) Использовать ключ командной строки -I

perl -w -I/var/www/cgi-bin /var/www/cgi-bin/upload.cgi

2) Используйте переменные окружения PERLLIB или PERL5LIB

export PERLLIB="$PERLLIB:/var/www/cgi-bin"
perl -w /var/www/cgi-bin/upload.cgi

PERL5LIB="$PERL5LIB:/var/www/cgi-bin" perl -w /var/www/cgi-bin/upload.cgi

3) используйте прагму lib в своем коде

# somewhere near the top of  /var/www/cgi-bin/upload.cgi
use strict;
use warnings;
use lib '/var/www/cgi-bin';
1 голос
/ 02 апреля 2012

Простейшим является mylib .

use mylib;

Поиск в каталоге с именами lib / и ../lib/ относительно сценария.Он правильно обрабатывает символические ссылки.


Если вам нужна большая гибкость, вы можете использовать lib .

use lib $lib_dir;

То же, что и

BEGIN { unshift @INC, $lib_dir; }

Например, чтобы посмотреть тот же каталог, что и сценарий, вы можете использовать

use Cwd            qw( realpath );
use File::Basename qw( dirname );

use lib dirname(realpath($0));

. Вы также можете указать его в командной строке .

perl -I$lib_dir script.pl

Наконец, если вы хотите установить его глобально, вы можете установить переменную окружения PERL5LIB в вашем скрипте входа в систему.

export PERL5LIB=$lib_dir

(Заменить $lib_dir нарассматриваемый путь.)

0 голосов
/ 02 апреля 2012

Скорее всего, проблема в том, что вы не правильно написали Config.Он начинается с прописной буквы C , и Perl не найдет модуль, если вы ошибетесь.

По умолчанию @INC содержит . - текущий рабочий каталог Perlprogram - как последняя запись, поэтому программы на Perl обычно ищут файлы в том же каталоге, что и исходный файл, в качестве последнего средства.

Config - это стандартный модуль, который создается, когда ваша копия Perlвстроенный.Он содержит все параметры для сборки.Его нельзя найти вне стандартных папок библиотеки.

...