Я настроил локальную веб-среду Perl на своей машине Windows. Приложение я продолжаю работать, родом из сервера Linux, и таким образом, хижина для источника .pl
файлы похожи так:
#!/usr/bin/perl
Это вызывает следующую ошибку в моем Windows dev машина:
(OS 2)The system cannot find the file specified.
Действительно ли возможно изменить мой Apache 2 conf так, чтобы хижина была проигнорирована на моей машине Windows? Конечно, я мог установить хижину на #!c:\perl\bin\perl.exe
, то, что много очевидно; но проблема возникает у развертывания обновленных файлов. Очевидно это было бы очень неудобно для возврата, это на каждом развертывается. Я использую ActivePerl в Windows 7.
Я должен был упомянуть, что должен сохранить хижину так, чтобы сценарии продолжили работать наш общий хостинг рабочий сервер Linux. Если бы у меня не было этого ограничения, и я не должен был использовать хижину, то очевидный ответ не должен был бы просто использовать его.
я использую #!/usr/bin/perl
в моих сценариях и настраиваю Apache в Windows для игнорирования строки хижины. Добавить
ScriptInterpreterSource Registry-Strict
к вашему httpd.conf
и настроить Windows Registry key, как объяснено в , документы .
Apache Здесь - то, что я получаю, когда я экспортирую ключ:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command] @="c:\\opt\\perl\\bin\\perl.exe"
я использовал эту установку с Apache и ActiveState Perl на моем ноутбуке Windows и Apache и дистрибутивами Perl, которые идут с ArchLinux на моем сервере.
документы Apache (на который я сослался выше), состояние:
опция Registry-Strict, которая является новой в Apache 2.0, делает то же самое как Реестр, но использует только подраздел
Shell\ExecCGI\Command
.ключ ExecCGI
не является общим. Это должно быть настроено вручную в реестре окон и следовательно предотвращает случайную программу, обращается к вашей системе . (шахта акцента)
Нет переносимой строки сдвига. Даже на одной и той же платформе и на одной и той же архитектуре, кто-то мог установить perl в другом месте.
Хитрость в том, чтобы не устанавливать модули и скрипты вручную. Когда вы упаковываете все как дистрибутивы и используете цепочку инструментов модулей, строки shebang автоматически изменяются, указывая на perl, который вы использовали для установки всего. Вам не нужно думать об этих деталях. :)
. Я использую # !/usr/bin/perl
в своих сценариях и настраиваю Apache в Windows для игнорирования строки shebang. Добавьте
ScriptInterpreterSource Registry-Strict
в httpd.conf
и настройте раздел реестра Windows, как описано в документах Apache .
Вот что я получаю при экспорте ключа:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command] @="c:\\opt\\perl\\bin\\perl.exe"
Я использовал эту установку с Apache и ActiveState Perl на моем ноутбуке Windows и дистрибутивами Apache и Perl, которые поставляются с ArchLinux на моем сервере.
Документы Apache (на которые я ссылался выше) указывают:
-121--2943707-Новый параметр Registry-Strict в Apache 2,0 выполняет те же действия, что и Registry, но использует только подраздел
Shell\ExecCGI\Command
. КлючExecCGI
не является общим. Его необходимо настроить вручную в реестре Windows и, следовательно, предотвратить случайные вызовы программ в системе . (акцент мой)
Я так не думаю: основная особенность последовательностей заключается в том, что возможны разрывы (подумайте о двух параллельных транзакциях, одна из которых выполняет ROLLBACK). Следует игнорировать пробелы. Почему они являются проблемой в вашем случае?
-121--4126645-У меня нет удобной Windows, но perlcritic говорит:
my $desc = q{Found platform-specific perl shebang line};
my $expl = q{Perl source in parrot should use the platform-independent shebang line: #! perl};
Итак, я думаю #! perl
должен работать.
Edit: не работает на linux; видимо, работает в попугай
, хотя я не вижу, как они справляются с этим.
Мне пришлось скопировать perl.exe в c:/usr/bin/ и переименовать его в perl (убрать .exe)
. Я использую # ! / usr / bin / env perl
как шебанг для всего моего Perl, будь то * nix или Windows. Windows просто игнорирует это, а Unixen следует env к выбранному perl disto.