Вы используете тот, который делает то, что вы хотите сделать.См. perlvar для объяснения дескриптора файла ARGV
.ARGV
также читает имена файлов, которые вы указываете в командной строке.Может быть, вы хотите эту функцию, а может и нет.
И вам не нужно делать то, что говорит Perl :: Critic.Многие из этих политик являются мнением небольшой группы людей.Если вы хотите явно читать из STDIN, это то, что вам нужно сделать.Люди, пишущие политику Критики, не могут заявить, что вам нужно делать.Задавать любые подобные вопросы бессмысленно без контекста их применения.Общие правила являются просто общими и ломаются, когда говорят о конкретных случаях.
Я не уверен, почему вы думаете, что ваши намерения яснее с STDIN, потому что вы не сообщили нам о своих намерениях.Код почти никогда не говорит сам за себя, потому что мы склонны кодировать решение, а не формулировать проблему.Решение может быть неправильным.
В вашем случае, я думаю, этот код более понятен, потому что он написан на Perl вместо используемого вами диалекта C :)
chomp( my $length = <STDIN> );
my $count = 0;
while ( <STDIN> ) {
last if $count++ > $lines_to_read;
my @temp = split ' ';
...;
}