Я не в восторге от архитектуры передачи аргументов, которую я развиваю для (многих) Perl-скриптов, которые были разработаны для некоторых скриптов, которые вызывают различные задания Hadoop MapReduce.
В настоящее время существует 8 скриптов(в форме run_something.pl), которые запускаются из cron.(И еще в пути ... мы ожидаем от 1 до 3 больше для каждой функции, которую мы добавляем в hadoop.) Каждая из них имеет около 6 идентичных параметров командной строки и пара параметров командной строки, которые похожи, все указаныс Euclid.
Реализации находятся в дюжине модулей .pm.Некоторые из них являются общими, а другие уникальными ....
В настоящее время я передаю аргументы глобально каждому модулю ...
Внутри run_something.pl У меня есть:
set_common_args (%ARGV);
set_something_args (%ARGV);
А внутри Something.pm у меня есть
sub set_something_args {(% MYARGS) = @ _;}
Итак, я могу сделать
if ( $MYARGS{'--needs_more_beer'} ) {
$beer++;
}
Я вижу, что у меня, вероятно, будут дополнительные "общие" файлы, которым я хочу передать аргументы, поэтому ябудет три или четыре вызова set_xxx_args в верхней части каждого run_something.pl, и это просто не кажется слишком элегантным.
С другой стороны, это лучше, чем передавать весь массив глупых аргументов по цепочке вызовови выбор и передача отдельных элементов по цепочке вызовов - это (а) слишком много работы (б) подверженность ошибкам (в) не очень дорого.
Во многих отношениях я просто делаюобъектно-ориентированный дизайн без объектно-ориентированных языковых атрибутов, и выглядит безобразно без упомянутых атрибутов, но тем не менее ...
У кого-нибудь есть мысли или идеи?