Внезапно Perl-скрипты не работают, если я не добавлю префикс «perl» и не укажу полный путь к скрипту. - PullRequest
8 голосов
/ 27 мая 2011

Я использую свою личную среду, которая стабильно работает уже более 20 лет.Я начал включать многие сценарии Perl около 14 лет назад.Я использую одно и то же дерево интерпретаторов командной строки в течение 22 лет (NDOS-> 4DOS-> 4NT-> TCMD, все одна и та же программа).

Я только что переключился с Perl ActiveState windows на StrawberryPerl.

В течение многих лет это все, что мне было нужно для запуска сценария Perl:

SET .pl=perl

Вот как вы указываете, с какой программой открывать вещи.

это я могу просто сделать:

c:\>test.pl
Hello, world!

Все просто работает.Навсегда.

Сегодня в недельной ОС все перестало работать.

Сценарии Perl будут работать, но они ничего не будут делать.Нет ошибок.Нет вывода.Ничего.

Единственный способ, которым это работает, - это если я префикс сценария с "perl" (в этом случае мой путь не ищется, потому что имя сценария теперь является параметром, поэтому мне остается заполнитьполный путь к сценарию)

Вот каково быть мной:

C:\>test.pl

C:\>perl test.pl 
Can't open perl script "test.pl": No such file or directory

C:\>perl c:\bat\test.pl 
Hello, world!

Обратите внимание, что вчера это работало нормально, даже сегодня раньше.Я не знаю, что изменило это, а что сломало, и я выглядел довольно долго, нашел похожие, но не идентичные проблемы - и никакое исправление не помогло.

У меня много скриптов.Мне бы очень не хотелось вставлять мир «perl» перед каждым из них, а затем определять полный путь!

На самом деле, мне, вероятно, придется написать оболочку perl.bat, которая преобразует имя файла параметра в полный путь и явно вызывает perl.

Я действительно не хочу этого делать,Это решение о запрете помощи.Я хочу понять, что не так, адрес есть, и решить это.

Я начинаю ненавидеть Windows 7 ...

Ответы [ 3 ]

8 голосов
/ 27 мая 2011

Я думаю, что ваша проблема, скорее всего, в том, что связь с .pl to perl.exe нарушена.

Посмотрите на HKEY_CLASSES_ROOT \ .pl в реестре, в нем, вероятно, есть подузел Perl (или, скажем, FOO)

Теперь посмотрите на HKEY_CLASSES_ROOT \ Perl или FOO, если это так.

Он должен иметь shell \ Open \ command key

который должен выглядеть примерно так

  "C:\Perl\bin\perl.exe" "%1" %*

Конечно, путь perl.exe в вашей системе может отличаться. % * - это важный бит, который передает аргументы, передаваемые в ваш скрипт, в perl.exe

Так что, когда вы делаете «test.pl foo bar» в командном окне, оболочка за кулисами фактически вызывает

C:\perlpath\perl.exe C:\scriptpath\test.pl foo bar.

Такая проблема возникает, когда вы просто выбираете файл * .pl в проводнике Windows и пытаетесь связать его с perl.exe.

В качестве дополнительного бонуса, если вы добавите .PL в переменную окружения PATHEXT, вам даже не нужно будет указывать test.pl просто test вызовет test.pl, если он первый в пути :)

2 голосов
/ 30 марта 2013

Windows Powershell

В Windows Powershell добавьте .PL к переменной среды PATHEXT (в противном случае сценарий будет запускаться в отдельном окне CMD).

Однако Powershell не будет запускать команды, если они не находятся в PATH (т. Е. "." Не находится в $ env: PATH по умолчанию, немного похоже на root в Unix)

Итак, чтобы запустить скрипт

./script 
./script.pl

Самый простой способ - использовать профиль Powershell.

например. в C: \ Users \ имя пользователя \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1

$env:PATH   = "C:\strawberry\perl\bin;$env:PATH"
$env:PATHEXT    = "$env:PATHEXT;.PL"

Если вы не хотите этого делать ./ (и обратите внимание, это угроза безопасности), добавьте "." на путь (без кавычек)

$env:PATH   = "C:\strawberry\perl\bin;$env:PATH;."

Тогда вы можете просто сделать

script
1 голос
/ 27 мая 2011

Вы можете проверить связь с расширением файла, щелкнув правой кнопкой мыши файл .pl, выберите properties и нажмите кнопку «Открыть с помощью» (это XP, я не знаю, как это выглядит в Windows 7).Возможно, ваше расширение указывает на неправильное место.

...