Почему я должен явно добавить perl перед сценарием для правильной работы getops? - PullRequest
1 голос
/ 31 октября 2010

Когда я запускаю свой скрипт так:

C:\>perl script.pl -f file

Работает нормально. Но если я просто сделаю:

C:\>script.pl -f file

тогда я не получаю никаких ошибок, но getopts ничего не присваивает $opt_f

Это прекрасно работает на Perl 5.8 Windows XP, но не работает на Perl 5.12 на Windows 7. Других версий perl не установлено (это новая сборка ОС).

Код:

use Getopt::Std;
our ($opt_f);
getopts('f:');
print "input file is: $opt_f \n";
print "$0\n

Запуск с:

C:\> perl get.pl -f sadf
input file is: sadf
get.pl

Запуск без:

C:\>get.pl -f sadf
input file is:

Ничего!

РЕДАКТИРОВАТЬ: исправлено, и этот вопрос был повтор ... Как заставить сценарии Perl распознавать параметры в консоли Win32 cmd?

ОП этого поста понял это.
Мне пришлось сделать то же самое, но также воссоздать ассоциацию в графическом интерфейсе (в дополнение к reg и в командной строке с помощью ftype.)

Ответы [ 6 ]

4 голосов
/ 01 ноября 2010

Сначала посмотрите:

C:\> assoc .pl
.pl=Perl

Возьмите строку в RHS и вызовите:

C:\> ftype Perl
Perl="C:\opt\Perl\bin\perl.exe" "%1" %*

Убедитесь, что %* есть.

Если нет, запустите оболочку cmd.exe от имени администратора и вызовите

C:\> ftype Perl=perl.exe %1 %*

См. Также ftype /?.

2 голосов
/ 01 ноября 2010

Когда вы вызываете ваш код как perl script.pl -f file, вы явно запускаете исполняемый файл perl и передаете ему имя файла и параметры для анализа.Но когда вы вызываете его как script.pl -f file, вы просите свою оболочку входа в систему запустить файл, который он будет анализировать как сценарий оболочки при отсутствии какой-либо другой информации - это не то, что вам нужно, так как ваш файл неbash-скрипт, но perl-скрипт!

Обычно такая информация (какая программа используется для разбора скрипта) дается в так называемой строке shebang .Если вы добавите это в начало вашего скрипта, он должен работать правильно:

#!/usr/bin/perl

(или, возможно, #!/bin/env perl, если вы хотите, чтобы программа env нашла perl в вашем $PATHдля вас).

0 голосов
/ 24 августа 2017

Вам не нужно добавлять префикс "perl" как ..

Для этого вам нужно изменить переменную среды PATH, ниже приведена команда для изменения переменной среды PATH

PATH=$PATH:$(pwd)

Это добавит текущий рабочий каталог в список каталогов в переменной среды PATH.Как только мы это сделаем, теперь мы можем работать без префикса "perl"

$ hello.pl

Hello world
0 голосов
/ 03 декабря 2015

Если вы используете ключевое слово perl fileName.pl -f checkfile (например), то вы явно вызываете интерпретатор.

Теперь, если вы хотите выполнить ту же команду, но без ключевого слова perl, тогда вынужно будет добавить shebang в ваш код.Проверьте вашу установку Windows Perl.это должно быть что-то вроде этого: #!/perl/bin/perl.

Что произойдет сейчас, с этой новой строкой командная строка прочитает первые 2 байта (#!) скрипта и выяснит, что этоPerl-скрипт и будет знать, где найти интерпретатор и будет вызывать его (так как вы указали путь к нему).Следовательно, ваш скрипт будет выполнен как скрипт perl.

0 голосов
/ 01 ноября 2010

исправлено, и этот вопрос повторялся ... Как заставить Perl-сценарии распознавать параметры в консоли Win32 cmd?

ОП этого поста понял это. Мне пришлось сделать то же самое, но также воссоздать ассоциацию в графическом интерфейсе (в дополнение к reg и в командной строке с помощью ftype.)

Спасибо всем за помощь!

0 голосов
/ 01 ноября 2010

С чем связаны Perl-скрипты (точнее, расширение .pl) в системе Windows7, где не работает вызов «script.pl»?

Кроме того, не могли бы вы попробовать запустить (с ибез префикса "perl"):

use Data :: Dumper;Печать данных :: Dumper-> Dump ([$ *, $ 0, $ 1])

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