Вещь совсем тривиальная и простая как валенок, но пусть будет. Среди наших перловых костылей часто натыкаюсь на скрипты, принимающие на вход целый паровоз безымянных параметров и поди угадай, что бы это значило. Выглядит примерно так: mysupertrouperscript.pl 592 1 1 2010-01-01. Чтобы разобраться в природе всех этих чисел приходится смотреть в исходный код и искать, каким образом обрабатываются входные аргументы. Другая проблема в том, что нельзя изменить порядок следования аргументов, а в некоторых случаях, и исключить какие-то из них. Решение состоит в замене входных параметров конструкциями вида --argname[=value], разбирать немногим сложнее, зато вызов скрипта становится нагляднее:
#!/usr/bin/perl # mysupertrouperscript.pl
use strict; ... my $ID = 0; my $DATE = '0000-00-00'; my $PRINT = 0; my $DEBUG = 0;
sub parse_args {
my $f_date = 0; for (my $i = 0; $i < scalar(@ARGV); $i++) {
$ID = $1 if ($ARGV[$i] =~ /--id=(\d+)/); if ($ARGV[$i]=~/--date=(\d{4}-\d{1,2}-\d{1,2})/) { $DATE = $1; $f_date = 1; } $PRINT = 1 if ($ARGV[$i] =~ /--print/); $DEBUG = 1 if ($ARGV[$i] =~ /--debug/); } warn "WARNING: date is not defined, $DATE will be used.\n"if ($f_date == 0); if ($ID == 0) { warn "ERROR: identifier is not defined.\n"; exit 1; } warn "INFO: print mode is on\n" if ($PRINT > 0); warn "INFO: debug mode is on\n" if ($DEBUG > 0); } ... parse_args(); ...
В этом разе параметры запуска скрипта более очевидны, а их порядок следования не такой строгий: mysupertrouperscript.pl --id=592 --date=2010-01-01 --print --debug
Спасибо =) я знаю intuit, очень крутой сервис. тока я по ключам его настроила => а задача была по сертификатам =(, у меня как раз не выходит центр сертификации установить на мой сервер.
Кстати, есть такая классная тётка, Лапонина Ольга Германовна, она в МГУ преподаёт. У неё есть учебник по протоколам безопасного сетевого взаимодействия, и там…
Comments
но статья…
Кстати, есть такая классная тётка, Лапонина Ольга Германовна, она в МГУ преподаёт. У неё есть учебник по протоколам безопасного сетевого взаимодействия, и там…
нет, на винде.
Извините за глупые вопросы, если что.