Почему моя Perl-программа жалуется на «Не удается найти URI.pm в @INC»? - PullRequest
3 голосов
/ 17 февраля 2010

Я новичок в Perl. Я получаю следующую ошибку при запуске скрипта:

Can't locate URI.pm in @INC (@INC contains: /usr/local/packages/perl_remote/5.6.1/lib/5.6.1/i86pc-solaris /usr/local/packages/perl_remote/5.6.1/lib/5.6.1 /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/i86pc-solaris /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1 /usr/local/packages/perl_remote/5.6.1/lib/site_perl .) at (eval 2) line 3.
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/HTTP/Request.pm line 3.
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/UserAgent.pm line 10.
BEGIN failed--compilation aborted at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/UserAgent.pm line 10.
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/Simple.pm line 26.
BEGIN failed--compilation aborted at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/Simple.pm line 26.
Compilation failed in require at txotf_0_install.pl line 35.
BEGIN failed--compilation aborted at txotf_0_install.pl line 35.

Какие могут быть возможные причины этого и как заставить скрипт работать. Любая помощь будет оценена.

Ответы [ 5 ]

8 голосов
/ 17 февраля 2010
  • Возможно, у вас не установлена ​​URI. Он может быть не сохранен где-либо на вашем компьютере, или он может быть «установлен» в определенном месте.

    • Если он просто не установлен, его необходимо установить из CPAN.
    • Если он сохранен на вашем компьютере, вам просто нужно сообщить системе, где его взять.

Если вам нужно установить его из CPAN, вам, вероятно, потребуются права администратора, чтобы поместить его в перечисленные каталоги. Но CPAN позволит вам установить его в пользовательский каталог, так что вы все равно сможете его установить.

Так что, если вы не можете установить модуль в каталогах, перечисленных в @INC, есть несколько способов.

  1. Perl 5 читает переменную среды с именем PERL5LIB. Любой каталог в этом «массиве» будет с добавлением до @INC. Таким образом, все в структуре каталогов $ENV{PERL5LIB} будет предпочтительнее любого системного каталога. (см. здесь )

  2. Еще один способ сделать это - скрипт . Прагма use lib также вставляет указанные каталоги в @INC. (см. lib )

    use lib '/path/to/URI/module';
    use URI;
    
  3. Последний способ, вы можете сделать это за пробег . Вы можете запустить perl с помощью ключа -I в командной строке perl -I/path/to/URI/module -e 1 (см. perlrun )

7 голосов
/ 17 февраля 2010

Нестандартные пути в @INC (например, /usr/local/packages, perl_remote и т. Д.) Указывают мне, что это пользовательский perl, установленный для определенной цели, возможно, с ограниченной функциональностью, чтобы предотвратить вред.

Задайте вопрос системному администратору.

1 голос
/ 17 февраля 2010

Массив @INC содержит список мест, где нужно искать скрипты Perl для оценки. Ваш скрипт не запустится, потому что его нет в списке @INC. Или:

  1. Поместите скрипт в одно из мест @INC; или
  2. Добавить местоположение файла в переменную среды $ PATH; или
  3. Укажите полный путь к скрипту при его вызове.
0 голосов
/ 05 ноября 2012

В моем случае я просто скопировал папку perl на другую машину и добавил путь к папке bin в переменную окружения PATH. Чтобы решить эту проблему, мне пришлось запустить правильную установку ActivePerl, которая в конце правильно настроила всю среду для perl.

0 голосов
/ 04 марта 2011

Это не значит, что любые другие ответы не являются хорошим советом (они, скорее всего, решают вашу проблему), но я столкнулся с подобной проблемой, которая озадачила меня на пару часов. Хотя я не уверен, что это решает проблему ОП, возможно, кто-то в будущем столкнется с этим вопросом и сэкономит время на устранении неполадок ...

Я обнаружил на новом сервере CentOS, что, несмотря на то, что @INC сообщает о пути к моим пользовательским библиотекам, и несмотря на то, что все права доступа к файлам и каталогам установлены правильно, mod_perl все равно выдает сообщение о том, что «Не удается найти» модули обсуждаемый. Это вдвойне озадачивало, потому что похожие сценарии с тем же оператором «use lib», который использовал Apache PerlRequire, могли работать без проблем.

Виновником оказался SELinux, и отключение немедленно позаботилось об этом. Более подробную информацию о / var / log / messages, которая привела меня к этому, а также о других общих проблемах можно найти здесь .

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