2012-05-16 15 views
6

Busco a un Perl equivalente al siguiente código PHP: -Perl equivalente a PHP bucle foreach

foreach($array as $key => $value){ 
... 
} 

Sé que puedo hacer un bucle foreach de este modo: -

foreach my $array_value (@array){ 
.. 
} 

Qué me permitirá hacer cosas con los valores de la matriz, pero me gustaría usar las claves también.

Sé que hay un hash Perl que le permite configurar pares clave-valor, pero solo quiero el número de índice que la matriz le da automáticamente.

Respuesta

7

Probar:

my @array=(4,5,2,1); 
foreach $key (keys @array) { 
    print $key." -> ".$array[$key]."\n"; 
} 

Obras para hashes y matrices. En el caso de Matrices, la tecla $ contiene el índice.

6

supongo que el Perl más cercano es algo como esto:

foreach my $key (0 .. $#array) { 
    my $value = $array[$key]; 

    # Now $key and $value contains the same as they would in the PHP example 
} 

Desde Perl 5.12.0, puede utilizar la función keys en matrices, así como los hashes. Eso podría ser un poco más legible.

use 5.012; 

foreach my $key (keys @array) { 
    my $value = $array[$key]; 

    # Now $key and $value contains the same as they would in the PHP example 
} 
+0

Gracias por todas estas respuestas . Mi problema está resuelto! Realmente no quiero votar sobre la mejor respuesta porque están bien. – fbc

+0

Si yo fuera tú, aceptaría la respuesta de flesk. La solución 'cada' es más cercana a la versión PHP que cualquiera de los otros ejemplos. –

14

Si está usando Perl 5.12.0 o superior se puede utilizar en matrices each:

my @array = 100 .. 103; 

while (my ($key, $value) = each @array) { 
    print "$key\t$value\n"; 
} 

de salida:

0  100 
1  101 
2  102 
3  103 

perldoc each

+2

Sí, el perezoso 'while' es preferible al ansioso' foreach'. – Axeman

+0

@Axeman: Ese es un buen punto. Incluso si la ganancia de rendimiento es insignificante en mi matriz de cuatro elementos, sin duda es una distinción digna de mención. – flesk

Cuestiones relacionadas