En este episodio de Perl Tutorial echaremos un vistazo a los arrays en Perl. Esto es un pequeño resumen de como funcionan los arrays en Perl. Veremos explicaciones más detalladas en el futuro.
Los nombres de variables que contienen arrays en Perl empiezan con el carácter @
.
Debido a nuestra insistencia del uso de strict
tendrás que declarar estas variables usando my
antes del primer uso.
Recuerda que todos los ejemplos asumen que tu código comienza con
use strict;
use warnings;
use 5.010;
Declarar un array:
my @names;
Declarar y asignar valores:
my @names = ("Foo", "Bar", "Baz");
Comprobar el contenido de un array
use Data::Dumper qw(Dumper);
my @names = ("Foo", "Bar", "Baz");
say Dumper \@names;
La salida será:
$VAR1 = [
'Foo',
'Bar',
'Baz'
];
El bucle foreach y los arrays en perl
my @names = ("Foo", "Bar", "Baz");
foreach my $n (@names) {
say $n;
}
Mostrará
Foo
Bar
Baz
Accediendo a un elemento de un array
my @names = ("Foo", "Bar", "Baz");
say $names[0];
Ten en cuenta que al acceder a un solo elemento de un array la @
inicial cambia a $
.
Puede parecer confuso, pero si piensas en ello es bastante obvio el porqué.
@
indica plural y $
indica singular. Al acceder a un solo elemento
de un array se comporta simplemente como una variable escalar normal.
Indices en un array
Los indices en un array empiezan por 0. El indice superior es siempre la variable
$#name_of_the_array
. Por tanto
my @names = ("Foo", "Bar", "Baz");
say $#names;
Mostrará 2 porque los indices son 0, 1 y 2.
Tamaño de un array
En Perl no existe ninguna función especial para obtener el tamaño de un array,
pero hay varias formas de obtener su valor. Una es usar el indice
superior y sumarle 1. En el caso anterior, $#names+1
es el tamaño del
array.
Además la función scalar
también puede usarse para obtener el tamaño:
my @names = ("Foo", "Bar", "Baz");
say scalar @names;
Mostrará 3.
La función scalar realiza una especie de conversión que, entre otras cosas, convierte un array a escalar. Debido a una decisión arbitraria a la par que inteligente, esta conversión devuelve el tamaño del array.
Iterar sobre los indices de un array
Hay casos en los que recorrer los valores de un array no es suficiente ya que podemos necesitar tanto el valor con el indice de ese valor. En ese caso necesitamos iterar sobre los indices y obtener los valores a partir de ellos:
my @names = ("Foo", "Bar", "Baz");
foreach my $i (0 .. $#names) {
say "$i - $names[$i]";
}
mostrará:
0 - Foo
1 - Bar
2 - Baz
Añadir un elemento a un array
La función push
añade un nuevo valor al final de un array:
my @names = ("Foo", "Bar", "Baz");
push @names, 'Moo';
say Dumper \@names;
El resultado será:
$VAR1 = [
'Foo',
'Bar',
'Baz',
'Moo'
];
Extraer elementos de un array
La función pop
extrae el último elemento de un array:
my @names = ("Foo", "Bar", "Baz");
my $last_value = pop @names;
say "Last: $last_value";
say Dumper \@names;
El resultado será:
Last: Baz
$VAR1 = [
'Foo',
'Bar',
];
Añadir un elemento al principio de un array
La función unshift
añadirá un elemento al principio del
array y moverá el resto hacia la derecha.
my @names = ("Foo", "Bar", "Baz");
unshift @names, "Moo";
say Dumper(\@names);
Mostrará:
$VAR1 = [
'Moo',
'Foo',
'Bar',
'Baz'
];
Extraer el primer elemento de un array
La función shift
extraerá el primer elemento del array
y moverá el resto hacia la izquierda.
my @names = ("Foo", "Bar", "Baz");
my $first_value = shift @names;
say "First: $first_value";
say Dumper \@names;
El resultado será:
First: Foo
$VAR1 = [
'Bar',
'Baz',
];