perl: принудительно использовать флаги командной строки? - PullRequest
0 голосов
/ 06 апреля 2011

Я часто пишу однострочники в командной строке так:

perl -Magic -wlnaF'\t' -i.orig -e 'abracadabra($_) for (@F)' 

Чтобы написать это, я мог передать те же флаги в строку shebang:

#!/usr/bin/perl -Magic -wlnaF'\t' -i.orig
abracadabra($_) for (@F);

Однако есть две проблемы с этим. Во-первых, если кто-то вызывает скрипт, передавая его непосредственно в perl (как «perl script.pl», а не «./script.pl»), флаги игнорируются. Кроме того, я не могу использовать «/ usr / bin / env perl» для этого, потому что, очевидно, я не могу передать аргументы perl при вызове его с помощью env, поэтому я не могу использовать другую установку perl.

В любом случае можно сказать сценарию "Эй, всегда запускайся так, как будто тебя вызвали с -wlnaF '\ t' -i.orig"?

1 Ответ

3 голосов
/ 06 апреля 2011

Вы ошибаетесь в версии perl script.pl;Perl специально ищет и анализирует опции из строки #!, даже в не-Unix, и если он запускается как скрипт, а не напрямую.

Строка #! всегда проверяется для переключателей какстрока анализируется.Таким образом, если вы находитесь на машине, которая допускает только один аргумент со строкой #! или, что еще хуже, даже не распознает строку #!, вы все равно можете получить согласованное поведение переключателя независимо от того, как был вызван Perl, дажеесли -x было использовано для поиска начала программы.

(...)

Разбор ключей #! начинается везде, где perlупоминается в строке.Последовательности "- *" и "-" специально игнорируются, так что вы могли бы, если бы вы были так склонны, сказать

#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
    if 0;

, чтобы Perl увидел ключ -p.

Теперь приведенная цитата ожидает perl -x, но она работает так же хорошо, если вы запускаете скрипт с

#! /usr/bin/env perl                                                   -*-perl -p-*-

(с достаточным количеством символов, чтобы преодолеть 32-символьное ограничение в системах с таким ограничением).; см. perldoc perlrun для подробностей об этом и остальном из того, что я цитировал выше).

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