• Publicidad

Declaración de arreglo

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Declaración de arreglo

Notapor seafree » 2022-02-01 13:35 @607

Pregunta básica: Viendo código por otros lados me ha surgido la duda de la declaración de un arreglo:

OPCION 1: $data0=[];
OPCION 2: @arr = ();

¿Cuál es la mejor opción y por qué?

Gracias y Respetos.
seafree
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Publicidad

Re: Declaración de arreglo

Notapor explorer » 2022-02-01 16:47 @741

Eso no son declaraciones, son definiciones (estás definiendo el valor inicial de esos arreglos).

En Perl Moderno, lo que se aconseja es trabajar siempre en modo estricto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use strict;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Eso obliga a que tenemos que declarar primero todas las variables que vamos a usar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @data;       # aquí guardaremos los datos del cliente
my @arr;        # lista de tareas pendientes para ese cliente
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


o al menos, hacerlo justo antes de usarlas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $i (0..9) {
    my @arr;         # declaramos un nuevo array válido sólo dentro del for()
    ...;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Una vez que están declaradas, las podemos definir:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@data = ( ... -lo que sea- ...);
@arr  = split /;/, $argumento;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y, naturalmente, podemos hacer las dos cosas a la vez:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @data = ( ... -lo que sea- ...);
my @arr  = split /;/, $argumento;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cosa distinta es si, de un arreglo que ya fue definido, queremos "ponerlo a cero" o "vaciarlo". Eso es muy cómodo hacerlo con undef:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
undef @array;  # vacía todo el array
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero, repito, esto sólo es necesario hacerlo si la variable ya fue declarada antes. Si está dentro de un contexto, creada con my(), entonces el array, de partida, está completamente vacío:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @arreglo;          # se declara, y no tiene ningún elemento
  2.  
  3. for my $i (qw(hola adiós)) {
  4.     my @saludos;      # se declara, y no tiene ningún elemento
  5.     ...;
  6.     push @saludos, $i; # cualquier operación con @saludos
  7.     push @arreglo, "$i, Juan";
  8.     ...;
  9. }
  10. # aquí, sólo se conoce a @arreglo. @saludos se perdió.
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


De las opciones que pones, la segunda (@arr = ()) es correcta (poner un array a 0 elementos), pero la primera es algo especial: está inicializando un arreglo anónimo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$data = [];    # asignamos a $data la referencia a un array vacío
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más adelante podemos almacenar elementos, como si fuese un array normal, pero referenciandolo de esa manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @{$data}, $elemento;   # decimos que $data referencia a un array y que nos referimos a él para hacer el push()
# de forma moderna, @{$data} es $data->@*
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El asignar arreglos anónimos a variables escalares es el fundamento de Perl para crear estructuras complejas.

Tienes toda la información sobre las referencias en perlref, junto con un breve tutorial en perlreftut.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Declaración de arreglo

Notapor seafree » 2022-02-02 11:53 @537

Enormes gracias, explorer.

Respetos para Ti.
seafree
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados