useradd - ¿Cuál es la diferencia entre ''para'' y ''foreach'' en Perl?
adduser y useradd linux (8)
La palabra clave foreach es en realidad un sinónimo de la palabra clave for, por lo que puede usar foreach para facilitar la lectura o para abreviar. (O porque el shell Bourne es más familiar para usted que csh, por lo que escribir es más natural). Si se omite VAR, $ _ se configura para cada valor.
Veo que estos se usan indistintamente. ¿Cual es la diferencia?
Veo que estos se usan indistintamente.
No hay diferencia más que la de sintaxis.
Cuatro letras.
Son funcionalmente idénticos, simplemente deletreado de manera diferente.
De http://perldoc.perl.org/perlsyn.html#Foreach-Loops
La palabra clave foreach es en realidad un sinónimo de la palabra clave for, por lo que puede usar cualquiera. Si se omite VAR, $ _ se establece en cada valor.
# Perl''s C-style
for (;;) {
# do something
}
for my $j (@array) {
print $j;
}
foreach my $j (@array) {
print $j;
}
Sin embargo:
Si alguna parte de LIST es una matriz, foreach se confundirá si agrega o elimina elementos dentro del cuerpo del bucle, por ejemplo, con empalme. Entonces no hagas eso.
Desde su introducción en perl-2.0 , foreach
ha sido sinónimo de for
. Es un guiño al comando foreach
del caparazón C
En mi propio código, en el raro caso de que esté usando un C-style for-loop, escribo
for (my $i = 0; $i < $n; ++$i)
pero para iterar sobre una matriz, deletreo
foreach my $x (@a)
Encuentro que se lee mejor en mi cabeza de esa manera.
En caso de "para" puede usar los tres pasos.
1) Inicialización 2) Revisión de la condición 3) Incremento o disminución
Pero en el caso de "foreach" no puede aumentar o disminuir el valor. Siempre toma el valor de incremento como 1.
Hay una diferencia sutil ( http://perldoc.perl.org/perlsyn.html#Foreach-Loops ):
El ciclo foreach itera sobre un valor de lista normal y establece la variable VAR para que sea cada elemento de la lista. Si la variable está precedida por la palabra clave my, tiene un alcance léxico y, por lo tanto, es visible solo dentro del ciclo. De lo contrario, la variable es implícitamente local para el ciclo y recupera su valor anterior al salir del ciclo. Si la variable fue declarada previamente con my, usa esa variable en lugar de la global, pero aún está localizada en el ciclo. Esta localización implícita ocurre solo en un ciclo foreach.
Este programa :
#!/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";
}
producirá eso:
10
10
11
100
11
No hay diferencia. De perldoc perlsyn :
La palabra clave
foreach
es en realidad un sinónimo de la palabra clavefor
, por lo que puede usarforeach
paraforeach
lectura o para abreviar.