Я задавался вопросом, выполняет ли foreach оператор в Perl итерации объектов в массиве в последовательном порядке? Таким образом, я получаю различные результаты, если я использую foreach многократно на том же массиве или списке?
Да, элементы в инструкции foreach
повторяются по порядку.
Ваш вопрос может возникнуть из-за путаницы при переборе элементов хеша:
my %hash = ('a' => 1, 'b' => 2, 'c' => 3);
foreach my $key (keys %hash) { print $key } ; # output is "cab"
Но кажущийся случайным порядок является артефактом того, как данные хранятся в хеш-таблице Perl (данные в хеш-таблице Perl не упорядочены) . Именно оператор keys
«изменяет» порядок хеш-таблицы, а не foreach
.
Если вы не будете менять список в промежутках, он всегда будет в последовательном порядке.
Причина, по которой порядок хэшей цикла foreach в Perl кажется случайным, содержится в документе perlsec, ссылка на который здесь