Есть ряд причин, по которым кто-то может захотеть это сделать, но вы не сказали, поэтому мне придется предположить некоторые из них.
Переключения в командной строке полезны, потому что программы командной строкиперепутайте варианты со списком аргументов и нуждайтесь в некотором способе узнать разницу.Таким образом, соглашение «вещи, которые начинаются с - не обычные аргументы».
command --key value --key2 value2 file1 file2 file3
command file1 --key value file2 --key2 value2 file3
Вы, безусловно, можете сделать что-то подобное с подпрограммой, где она просматривает список аргументов, ища вещи, которые начинаются с * 1006.* и подразумевает, что следующим в списке является ассоциированное значение ... но у подпрограмм есть лучшие и более простые способы сделать это.
temp( ["file1", "file2", "file3"], { something => 1 } );
В этом случае основной список аргументов передается первым как массивссылка, и опции передаются в секунду в ссылке на хеш.В этом нет никакой двусмысленности.
sub temp {
my($files, $options) = @_;
print "Something!\n" if $options->{something};
for my $file (@$files) {
...do something with $file...
}
}
Вы можете даже сделать этот шаг еще дальше и передать все как опцию.
temp( files => ["file1", "file2", "file3"], something => 1 );
sub temp {
my %args = @_;
print "Something!\n" if $args{something};
for my $file (@{$args{files}}) {
...do something with $file...
}
}
Это полезно, если не очень ясно, что является вариантом, а чтоАргумент.Возможно, излишний пример «списка файлов с опциями» здесь.