Programación Web y Scripting > Perl
Re: problemas con arreglos
(1/1)
Alma Janeth:
hola
por que en arreglos no me almacena los datos y tampoco los muestra cuando hago referencia a ellos ejemplo:
@array[0]=5
no me muestra nada si tengo 5,6,2 etc solo no almacena nada y por lo tanto no muestra nada
azzwad:
Hola, espero poder responderte correctamente a tu pregunta.
Mira viendo mas o menos lo que querias hacer hice un pequeño codigo para que veas, ya lo corri y si imprime bien los valores, checa:
#!usr/bin/perl
#defines valores al arreglo
@arr[0]=11;
@arr[1]=12;
@arr[2]=13;
@arr[3]=14;
@arr[4]=15;
#imprimes arreglo
for( $i=0; $i<5; $i++)
{
print @arr[$i]," ";
}
Si lo que quieres es pedir los valores desde el teclado, el codigo seria asi
#!usr/bin/perl
#pides valores al arreglo
for( $i=0; $i<5; $i++)
{
$num=<STDIN>;
chop($num);
@arr[$i]=$num;
}
#imprimes arreglo
for( $i=0; $i<5; $i++)
{
print @arr[$i]," ";
}
Bueno espero le entiendas, no soy bueno para explicar pero espero que con el codigo quede bien
Saludos.
Alma Janeth:
gracias ya me almacena los valores y si me sirvio lo que me escribiste :angel:
azzwad:
No hay por que, lo que necesites por aca andamos
suerte!.
explorer:
Es un error muy común de los programadores de Perl, confundir el uso de la '@' y del '$' en los arrays.
Una '@' hace referencia a un array, desde luego... pero al array en su conjunto. Si sólo queremos acceder a un sólo elemento, estamos queriendo acceder a un escalar, por lo que estamos obligados a usar el '$'.
En esta línea:
--- Código: Text ---@array[1] = 5; lo que estamos haciendo es:
1.- dado que existe una '@' delante de 'array', Perl convierte a '5' en un array (de un sólo elemento, claro).
2.- Perl coge todos los elementos de ese nuevo array y los distribuye por los elementos de @array indicados por los índices que están entre corchetes. En este caso, sólo hay un '1', por lo que coge el primer elemento del nuevo array (el '5') y lo mete en la posición segunda ([1]) del @array.
Si en las primeras líneas del programa tuvieramos la costumbre de poner
--- Código: Text ---use warnings; entonces recibiríamos un aviso así:
--- Citar ---Scalar value @arr[1] better written as $arr[1] at -e line 1.
--- Fin de la cita ---
Vamos a modificar el ejemplo propuesto por azzwad para intentar verlo mejor:
--- Código: Text ---#!usr/bin/perluse warnings;use strict; #defines valores al arreglo@arr[0..4] = (11, 12, 13, 14, 15); #imprimes arreglofor( $i=0; $i<5; $i++) { print $arr[$i]," " }
Como véis, sí podemos hacer una asignación de estas dos maneras:
--- Código: Text ---@arr[0..4] = (11, 12, 13, 14, 15);$arr[0] = 11; $arr[1] = 12; $arr[2] = 13; # etc. pero no así:
--- Código: Text ---@arr[0] = 11; @arr[1] = 12; @arr[3] = 13; # etc.
El uso del '@' debe quedar restringido sólo en el caso de que queramos hacer referencia a más de un elemento. Ejemplo: si queremos pintar los elementos que van desde la posición 1 a la 3 entonces haríamos:
--- Código: Text ---print "@arr[1..3]\n"; # 12 13 14
El uso de '@arr[0]=11;' sólo está permitido a partir del Perl6.
Navegación
Ir a la versión completa