Скрипт Perl работает в терминале Linux, но ошибки в браузере - PullRequest
2 голосов
/ 29 ноября 2011

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

Script - test.pl:

#!/home/biotools/perl/5.10.0/bin/perl
use lib '/home/biotools/current/lib/site_perl/5.10.0';
use lib '/people/users/123456/classPath/lib';
use IngresLXSetupNoLog;
use strict;
use warnings;

use Path::Class;  # this is line 8

my $dir = dir('./mydir'); # foo/bar

print "Content-type: text/html\n\n";

# Iterate over the content of foo/bar
while (my $file = $dir->next) {

    # See if it is a directory and skip
    next if $file->is_dir();

    # Print out the file name and path
    print $file->stringify . "\n";
}

Ошибка:

[Tue Nov 29 08:46:29 2011] [error] Can't locate Path/Class.pm in @INC (@INC contains: /people/users/123456/classPath/lib /home/biotools/current/lib/site_perl/5.10.0/x86_64-linux /home/biotools/current/lib/site_perl/5.10.0 /usr/local/biotools/perl/5.10.0/lib/5.10.0/x86_64-linux /usr/local/biotools/perl/5.10.0/lib/5.10.0 /usr/local/biotools/perl/5.10.0/lib/site_perl/5.10.0/x86_64-linux /usr/local/biotools/perl/5.10.0/lib/site_perl/5.10.0 .) at /projects/apps/dev/cgi-bin/miscellaneous/studyinfo/test.pl line 8.
[Tue Nov 29 08:46:29 2011] [error] BEGIN failed--compilation aborted at /projects/apps/dev/cgi-bin/miscellaneous/studyinfo/test.pl line 8.
[Tue Nov 29 08:46:29 2011] [error] Premature end of script headers: test.pl

Ответы [ 3 ]

2 голосов
/ 29 ноября 2011

Где находится файл .pm, который определяет Path::Class?(Если вы не знаете, попробуйте добавить BEGIN { print "@INC\n"; } прямо перед строкой 8 и запустить скрипт из командной строки.)

Вам необходимо добавить родительский каталог в ваш @INC, используя другой use lib '...'; прагма.

2 голосов
/ 29 ноября 2011

Когда скрипт запускается в командной строке, @INC содержит путь, по которому можно найти Path / Class.pm. Очевидно, что это не так в случае с веб-браузером.

Убедитесь, что вы хорошо понимаете рабочий каталог скрипта и значения @INC при запуске в качестве веб-сервера, и выясните, как получить соответствующий путь (родительский элемент Path) в @INC при необходимости.

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

0 голосов
/ 27 января 2013

Если вы пользователь Debian:

$ sudo apt-get install libpath-class-perl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...