Los arrays y las listas contienen una colección ordenada de escalares. Salvo cuando se usan referencias (que se tratarán en un concepto aparte), esto significa que los arrays y las listas siempre son planos, es decir, no pueden contener otros arrays ni otras listas.
En la mayoría de los casos, las listas van entre paréntesis () con sus elementos separados por comas ,.
Normalmente, una variable de tipo array se rellena asignándole una lista, por ejemplo, my @names = ('Alice', 'Bob', 'Charlie');.
Se puede acceder a los elementos de un array o una lista especificando índices mediante un subíndice, por ejemplo, ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.
Los índices en Perl empiezan en 0.
Los índices negativos cuentan desde el final del array o la lista, por ejemplo, ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.
Hay muchas funciones implementadas para operar con arrays y listas; algunas de las más útiles son grep, para obtener una nueva lista de elementos filtrados que cumplen una condición; map, para transformar los elementos en una nueva lista de valores; y sort, para obtener una nueva lista de elementos reordenados.
Entre las funciones para manipular arrays están push, para añadir elementos al final; pop, para eliminar el último elemento; shift, para eliminar el primer elemento; unshift, para añadir elementos al principio; y splice, para modificaciones más complejas.
Iterar sobre arrays y listas con una instrucción for(each) también será algo que encontrarás con frecuencia.
Al acceder a los elementos de un array, el sigilo que uses determina el resultado.
El subíndice [] al final del nombre de la variable es lo que le indica a Perl que estás accediendo a un array con ese nombre.
my @names = ('Alice', 'Bob', 'Charlie');
$names[0]; # 'Alice' <- A scalar
@names[0]; # ('Alice') <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice
$names[1, 2]; # 'Charlie' <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie') <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice
Aunque está permitido, se recomienda que distintos tipos de variable no compartan el mismo nombre por legibilidad.
Los arrays y las listas comparten muchas similitudes y en muchos sitios pueden usarse de forma intercambiable, pero no son lo mismo. Una lista es una colección fija e inmutable de escalares. Un array es una colección variable de escalares en la que tanto el contenido como el tamaño del propio array pueden cambiar.
Tienen comportamientos distintos en algunos contextos. Un array usado en contexto escalar te dará el tamaño del array. Una lista usada en contexto escalar te dará el último elemento de la lista y, posiblemente, algunos avisos sobre el resto de su contenido al usarse en contexto vacío.
my @names = ('Alice', 'Bob', 'Charlie');
scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).
Puedes leer más en las siguientes preguntas frecuentes: ¿Cuál es la diferencia entre una lista y un array?