Я вижу, что они используются взаимозаменяемо. Какая разница?
Какая разница между "for" и "foreach" в Perl?
Ответ 1
Нет никакой разницы. Из perldoc perlsyn:
Ключевое слово
foreach
на самом деле является синонимом ключевого словаfor
, поэтому для краткости можно использоватьforeach
для чтения илиfor
.
Ответ 2
Я вижу, что они используются взаимозаменяемо.
Нет никакой разницы, кроме синтаксиса.
Ответ 3
Четыре буквы.
Они функционально идентичны, просто написаны по-разному.
Ответ 4
С тех пор как его введение в perl-2.0, foreach
было синонимом for
. Это знак для команды оболочки foreach
.
В моем собственном коде, в редком случае, когда я использую C-стиль для цикла, пишу
for (my $i = 0; $i < $n; ++$i)
но для итерации по массиву я описываю
foreach my $x (@a)
Я считаю, что он лучше читает в моей голове.
Ответ 5
Ключевое слово foreach на самом деле является синонимом ключевого слова for, поэтому вы можете использовать foreach для удобства чтения или для краткости. (Или потому, что оболочка Bourne вам больше знакома, чем csh, поэтому запись для нее происходит более естественно). Если VAR опущен, для каждого значения устанавливается значение $_.
Ответ 6
Из http://perldoc.perl.org/perlsyn.html#Foreach-Loops
Ключевое слово foreach на самом деле является синонимом ключевого слова for, поэтому вы может использовать либо. Если VAR опущен, для каждого значения установлено значение $_.
# Perl C-style
for (;;) {
# do something
}
for my $j (@array) {
print $j;
}
foreach my $j (@array) {
print $j;
}
Однако:
Если какая-либо часть LIST является массивом, foreach будет очень запутанным, если вы добавлять или удалять элементы внутри тела цикла, например, с помощью сплайсинга. Так что не делайте этого.
Ответ 7
Существует тонкая разница (http://perldoc.perl.org/perlsyn.html#Foreach-Loops):
Цикл foreach выполняет итерацию над нормальным значением списка и устанавливает переменную VAR как каждый элемент списка по очереди. Если переменной предшествует ключевое слово my, то она лексически охвачена и, следовательно, отображается только внутри цикла. В противном случае переменная неявно локальна для цикла и возвращает свое прежнее значение после выхода из цикла. Если переменная была ранее объявлена с помощью my, она использует эту переменную вместо глобальной, но она все еще локализована в цикле. Эта неявная локализация происходит только в цикле foreach.
Эта программа:
#!/usr/bin/perl -w
use strict;
my $var = 1;
for ($var=10;$var<=10;$var++) {
print $var."\n"; # print 10
foo(); # print 10
}
print $var."\n"; # print 11
foreach $var(100) {
print $var."\n"; # print 100
foo(); # print 11 !
}
sub foo {
print $var."\n";
}
будет производить следующее:
10
10
11
100
11
Ответ 8
В случае "для" вы можете использовать три шага.
1) Инициализация 2) Проверка состояния 3) Увеличение или уменьшение
Но в случае "foreach" вы не можете увеличивать или уменьшать значение. Он всегда принимает значение приращения как 1.