Я видел множество способов запуска кода или скриптов Perl с разными флагами. Однако, когда я пытаюсь найти в Google значение каждого флага, я в основном получаю результаты для общих сайтов Perl, и никакой конкретной информации о флагах или их использовании там не обнаружено.
Ниже приведены флаги, с которыми я сталкиваюсь чаще всего, и я понятия не имею, что они означают:
- perl -pe
- perl -pi
- perl -p
- perl -w
- perl -d
- perl -i
- perl -t
Я буду очень благодарен, если вы расскажете мне, что каждый из них означает и какие варианты их использования, или, по крайней мере, подскажете мне способ узнать их значение.
perl
command-line
flags
Тюдор Константин
источник
источник
perldoc perlrun
есть список всех параметров командной строки, которые принимает Perl.Ответы:
Да, Google , как известно , трудно отрываясь знаки препинания и, к сожалению, Perl делает похоже, в основном состоит из знаков препинания :-)
Все параметры командной строки подробно описаны в perlrun . (доступно из командной строки, вызвав
perldoc perlrun
)Вкратце перейдем к вариантам, один за другим:
источник
perldoc perlrun
. Я удалил свой ответ. :-)-w
на самом деле обычно следует избегать, поскольку он позволяет выводить предупреждения для всего кода, включая модули CPAN, которые не были написаны с учетом предупреждений. Результаты в целом довольно шумные, а также довольно бесполезные.-w
обычно избегают, но его следует заменитьuse warnings
в вашем собственном коде.use warnings
в своем собственном коде, но -w действительно используется - он помогает отсеять плохо написанные модули CPAN. :-)-i
принимает расширение для резервного копирования.-e
принимает команду Perl. В-0ep
вы говорите Perl , что «р» является командой Perl вместо аргумента. Это вообще не сработает.-p
Флаг в основном запускает скрипт с-e
позволяет передать скрипт вSTDIN
-i
указывает интерпретатору, что все данные, передаваемыеSTDIN
исполняющимся скриптом, должны выполняться на месте.-w
то же самоеuse warnings;
, но в глобальной, а не локальной области-d
запускает отладчик Perlисточник
-w
не совсем то же самоеuse warnings
, что и последнее, привязано к локальному файлуДругие упомянули perlrun. Если вы используете B :: Deparse, вы можете увидеть, что это означает (для большинства вещей):
1 обозначается символом «???», потому что он оптимизирован.
-i устанавливает $ ^ I, например
Но помните, что <ARGV> использует открытие с двумя аргументами, поэтому не используйте имена файлов, которые начинаются
> <
или начинаются / заканчиваются на|
.источник
Также есть один важный флаг,
-n
который не упоминается в списке.-n
работает так же-p
, только$_
по умолчанию не печатает . Это может быть очень полезно при фильтрации текстовых файлов.Таким образом, Perl может заменить
grep | sed
однострочным.Например:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
Распечатает все целочисленные значения, найденные после «Сообщения прочитаны:», и не более того.
источник
print $1
это не то же самое, чтоprint
(print $_
).echo abc | perl -nw -e "print if (1)"
распечататьabc
.$1
Ссылка не нужна .