использовать строгий; строка в perl, из-за которой простой скрипт печати не запускается

Я установил apache и perl несколько дней назад и успешно запустил несколько скриптов, но мне не удалось запустить ни одного скрипта после установки «use strict;» строка. Все, что я вижу при добавлении этой строки, - это очень общая «Внутренняя ошибка сервера» с НУЛЕВОЙ уникальной информацией.

Вот скрипт, который выдает ошибку:

#!/usr/bin/perl

use strict;

print "Content-Type: text/html", "\n\n";

print "Hello World";

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


person samsmyname    schedule 02.05.2014    source источник
comment
Он работает нормально для меня. Вы установили разрешение на выполнение для скрипта? Проверьте журнал ошибок сервера (если у вас есть к нему доступ) для получения дополнительной информации о проблеме.   -  person Ted Hopp    schedule 02.05.2014
comment
Что у вас в журнале ошибок апача?   -  person friedo    schedule 02.05.2014
comment
Это обязательно в винде? Журнал ошибок показывает: [Sat May 03 02:34:14.357924 2014] [cgi:error] [pid 2840:tid 884] (OS 2) Система не может найти указанный файл. : [клиент 127.0.0.1:53749] не удалось создать дочерний процесс: 720002: cookies.pl [сб, 03 мая 02:34:14.357924 2014] [cgi: ошибка] [pid 2840: tid 884] (ОС 2) Система не может найти указанный файл. : [клиент 127.0.0.1:53749] AH01223: не удалось создать дочерний процесс: D:/wamp/www/cookies.pl   -  person samsmyname    schedule 02.05.2014
comment
Если вы используете Windows, то #!/usr/bin/perl не будет. Попробуйте вместо этого #!perl.   -  person Miller    schedule 02.05.2014
comment
@Miller: Perl в Windows игнорирует путь к исполняемому файлу в строке shebang. Он принимает к сведению только любые параметры времени выполнения, указанные там. Ах, но из комментария ikegami я вижу, что Apache действительно использует эту строку!   -  person Borodin    schedule 02.05.2014


Ответы (1)


Всегда проверяйте журнал ошибок в подобных ситуациях. Пусть он скажет вам, что не так.

Есть как минимум три возможных варианта:

  1. Скрипт не исполняемый, поэтому не запустится. (конкретно для Unix)
  2. #!/usr/bin/perl не существует и поэтому не может быть выполнен.
  3. Ваш @INC как-то запутался, поэтому strict не может быть найден.

Ваш журнал ошибок должен быть в состоянии сказать, является ли это одним из них довольно быстро.

person Miller    schedule 02.05.2014
comment
Переход на #!perl действительно запускает код! Насколько я понял, окна полностью игнорировали эту строку; он использовался только unix. - person samsmyname; 02.05.2014
comment
Понятно, что между Windows и Unix существует много различий в среде. Однако Apache попытается вести себя так же, особенно в отношении чего-то столь фундаментального, как шебанг. - person Miller; 02.05.2014
comment
Буду ли я прав, предполагая, что use strict; на самом деле работало, как ожидалось, когда мои сценарии перестали работать? Я ожидал появления ошибок вместо внутренней ошибки сервера, если он работал, а не только в журнале сервера. - person samsmyname; 02.05.2014
comment
@samsmyname, Windows не использует его, но использует ваш веб-сервер. - person ikegami; 02.05.2014
comment
@samsmyname: use strict не повлияет на сценарий, который вы показываете. Ни Windows, ни Perl не обращают внимания на путь к исполняемому файлу perl, указанный в командной строке, но из комментария ikegami кажется, что Apache действительно использует эту строку. - person Borodin; 02.05.2014
comment
@Borodin Да, я разрабатываю Apache для Windows, и он использует shebang. Я понимаю, что Windows cmd отличается, но это не то, о чем идет речь в этом вопросе. - person Miller; 02.05.2014