Deepesz ответ - один хороший способ пойти.
В вашем втором варианте тоже нет ничего плохого:
my $op = shift; # implicit shift from @ARGV
my $file = shift;
my @things = @ARGV;
# iterate over @things;
Вы также можете пропустить копирование @ARGV
в @things
и работать непосредственно над ним. Однако, если сценарий не очень короткий, очень простой и вряд ли станет более сложным со временем, я бы избегал слишком большого количества коротких путей.
Выбираете ли вы подход Deepesz или этот - во многом вопрос вкуса.
Решение о том, что лучше, действительно является вопросом философии. Суть вопроса в том, следует ли вам модифицировать глобальные переменные, такие как @ARGV
. Кто-то скажет, что это не так уж важно, если это сделано очень наглядно. Другие поспорили бы за то, чтобы оставить @ARGV
нетронутым.
Не обращайте внимания на тех, кто выступает в пользу того или иного варианта из-за проблем со скоростью или памятью. Массив @ARGV
ограничен большинством оболочек очень маленьким размером, и, следовательно, при использовании одного метода над другим существенная оптимизация недоступна.
Getopt :: Long , как уже упоминалось, также является отличным выбором.