2012-01-30 2 views
-2

У меня есть сценарий perl, который принимает длинный вариант, например --pager='less -R', и я хочу сократить его до -p. Это быстрый взлом, я не знаю perl, и я предполагаю, что наиболее прямым способом является поиск и замена -p в массиве ARGV (или что-то, что он вызывается в perl) с помощью -pager = 'less -R' до он начинает обрабатывать аргументы командной строки.заменить элемент в @ARGV в perl

+0

Почему бы не выполнить поиск кода для «пейджер» и попробовать, что произойдет, если вы измените его на «p»? (Пожалуйста, сохраните копию оригинального сценария). –

ответ

1

Вы можете использовать

s/^-p$/--pager/ for @ARGV; 

как быстрый хак. Просто не вводите -p в качестве значения для любой опции. Кроме того, всегда используйте пробел после -p.

0

Если параметр указан как --pager="less -R", то я подозреваю, что сценарий использует Getopt::Long. Соответственно измените соответствующую переменную.

+0

Это не вопрос смены пейджера на p, это вопрос замены словаря '-p' для '--pager = "less -R"' – chriskirk

12

Похоже, что вам определенно необходимо Getopt::Long, часть основного распределения Perl.

Хотя это не быстрый хак, это на мой взгляд правильный способ обработки аргументов. Прочитайте документацию, вы увидите, как быстро вы можете справиться с такими вещами.

+1

Насколько я понимаю, кто-то еще мог найти интересный модуль. –

+2

Некоторые мысли о том, почему вы всегда должны использовать Getopt :: Long. http://www.perlmonks.org/?node_id=687283. Если у вас есть время, вы должны прочитать оригинальное сообщение tchrist от p5p. –

+1

и фактически Getopt :: Long был ядром, так как был выпущен Perl 5. Нет необходимости устанавливать CPAN. –

3

Зачем изобретать колесо, особенно если вас не интересует «правильное» программирование на Perl?

Было бы больно добавлять couple of extra lines?

use strict; 
use warnings; 
use Getopt::Long; 

my $pager = 'default value'; 
GetOptions('pager=s' => \$pager) or die "Could not load options\n"; 
Смежные вопросы