Вот пример, чтобы проиллюстрировать это немного лучше.
if( $#ARGV == -1 ){
print "No arguments passed.\n";
} else if( $#ARGV == 0 ){
print "One argument passed.\n";
} else {
print $#ARGV +1 ."arguments passed.\n";
}
Мне нравится использовать «scalar @ARGV», так как это представляет количество элементов в массиве.Вместо этого $ # ARGV - это индекс последнего элемента в массиве.Вот почему он выключен одним. Если бы $ [(это специальная переменная, которая устанавливает начальный индекс массивов Perl.) Было установлено в 1, а не в 0 (по умолчанию), то $ # ARGV не было бы отключено одним для наших целей.Я бы не стал связываться с $ [так как он глобальный.Изменение может сломать много модулей.
my $argument_count = scalar @ARGV;
if( $argument_count == 0 ){
print "No arguments passed.\n";
} else if( $argument_count == 1 ){
print "One argument passed.\n";
} else {
print "$argument_count arguments passed.\n";
}