В чем разница между «для» и «foreach» в Perl? - PullRequest
31 голосов
/ 17 февраля 2010

Я вижу, что они используются взаимозаменяемо.Какая разница?

Ответы [ 8 ]

38 голосов
/ 17 февраля 2010

Разницы нет. От perldoc perlsyn :

Ключевое слово foreach на самом деле является синонимом ключевого слова for, поэтому вы можете использовать foreach для удобства чтения или for для краткости.

15 голосов
/ 17 февраля 2010

Я вижу, что они взаимозаменяемы.

Нет никакой разницы, кроме синтаксиса.

6 голосов
/ 17 февраля 2010

Четыре буквы.

Они функционально идентичны, просто пишутся по-разному.

4 голосов
/ 17 февраля 2010

С момента появления в perl-2.0 , foreach является синонимом for. Это дань команде foreach оболочки C.

В моем собственном коде, в редком случае, когда я использую цикл for в стиле C, я пишу

for (my $i = 0; $i < $n; ++$i)

но для итерации по массиву я прописал

foreach my $x (@a)

Я считаю, что так у меня в голове читается лучше.

2 голосов
/ 16 октября 2014

С http://perldoc.perl.org/perlsyn.html#Foreach-Loops

Ключевое слово foreach на самом деле является синонимом ключевого слова for, поэтому вы можно использовать либо. Если VAR опущен, для каждого значения устанавливается $ _.

# Perl's C-style
for (;;) {
    # do something
}

for my $j (@array) {
    print $j;
}

foreach my $j (@array) {
    print $j;
}

Тем не менее:

Если какая-либо часть LIST является массивом, foreach будет очень запутан, если вы добавить или удалить элементы в теле цикла, например, с помощью соединения. Так что не делай этого.

1 голос
/ 07 июля 2011

Ключевое слово foreach на самом деле является синонимом ключевого слова for, поэтому вы можете использовать foreach для удобства чтения или для краткости. (Или потому, что оболочка Bourne вам более знакома, чем csh, поэтому писать для for более естественно.) Если VAR опущен, $ _ устанавливается для каждого значения.

0 голосов
/ 23 февраля 2012

Существует небольшая разница (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
0 голосов
/ 01 марта 2010

В случае «для» вы можете использовать три шага.

1) Инициализация 2) Проверка состояния 3) Увеличение или уменьшение

Но в случае «foreach» вы не можете увеличить или уменьшить значение. Это всегда принимает значение приращения как 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...