En Perl, las variables se dividen en scalars ($), arrays (@) y hashes (%):
Scalars ($variable) – almacenan un solo valor (cadena, número):
my $name = "Ivan"; my $age = 30;
Arrays (@array) – conjunto de elementos ordenados (indexados por números):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Hashes (%hash) – conjunto de pares clave-valor (arreglo asociativo):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Tenga en cuenta que para acceder a un elemento se utiliza un símbolo específico dependiendo del tipo de variable:
$array[0] — elemento del array$hash{"key"} — valor del hash por clave¿En qué se diferencian las expresiones @array[1,2] y $array[1,2]?
Respuesta:
@array[1,2]— proporciona una lista con varios elementos del array (rebanada).$array[1,2]— incorrecto, genera un error. Para acceder a varios elementos del array, se utiliza solo la rebanada@array[...].Ejemplo:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
Historia
En un proyecto de registro, un programador accedió a un elemento del hash a través de
@colors{"red"}. Como resultado, obtenía un error aleatorio en lugar del valor del hash, porque para un valor único se necesita$, no@.
Historia
En un servicio, al iterar sobre los índices del array, se olvidaron de usar la forma correcta — en lugar de
$array[$i]utilizaron@array$i, lo que causaba advertencias y resultados incorrectos.
Historia
En un proyecto de API, describieron una función que tomaba un array como
$args, pero al llamarla se pasaba un array sin scalar:func(@list). Resultó que de esta manera los elementos del array se "desplegaban" en una lista, y la función no funcionaba como esperaban. Era correcto aceptar el array como@args.