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( &#036;i=0; &#036;i&#60;5; &#036;i++) { print &#036;arr[&#036;i],&#34; &#34; } 
Como véis, sí podemos hacer una asignación de estas dos maneras:
--- Código: Text ---@arr[0..4] = (11, 12, 13, 14, 15);&#036;arr[0] = 11; &#036;arr[1] = 12; &#036;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 &#34;@arr[1..3]&#092;n&#34;; # 12 13 14 
El uso de '@arr[0]=11;' sólo está permitido a partir del Perl6.

Navegación

[0] Índice de Mensajes

Ir a la versión completa