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:
Using perl Syntax Highlighting
use strict
;Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Eso obliga a que tenemos que declarar primero todas las variables que vamos a usar:
Using perl Syntax Highlighting
my @data; # aquí guardaremos los datos del cliente
my @arr; # lista de tareas pendientes para ese clienteColoreado en 0.001 segundos, usando
GeSHi 1.0.8.4
o al menos, hacerlo justo antes de usarlas:
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:
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:
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:
Using perl Syntax Highlighting
undef @array; # vacía todo el arrayColoreado 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:
Using perl Syntax Highlighting
my @arreglo; # se declara, y no tiene ningún elemento
for my $i (qw(hola adiós)) {
my @saludos; # se declara, y no tiene ningún elemento
...;
push @saludos, $i; # cualquier operación con @saludos
push @arreglo, "$i, Juan";
...;
}
# aquí, sólo se conoce a @arreglo. @saludos se perdió.
Coloreado en 0.001 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:
Using perl Syntax Highlighting
$data = []; # asignamos a $data la referencia a un array vacíoColoreado 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:
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.