In Perl worden variabelen onderverdeeld in scalaren ($), arrays (@) en hashes (%):
Scalaren ($variable) – slaan één waarde op (string, nummer):
my $name = "Ivan"; my $age = 30;
Arrays (@array) – een verzameling gesorteerde elementen (geïndexeerd met getallen):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Hashes (%hash) – een verzameling sleutel-waarde paren (associatieve array):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Let op dat een specifiek symbool wordt gebruikt om toegang te krijgen tot een element, afhankelijk van het type variabele:
$array[0] — element van de array$hash{"key"} — waarde van de hash op basis van de sleutelWat is het verschil tussen de expressies @array[1,2] en $array[1,2]?
Antwoord:
@array[1,2]— geeft een lijst met meerdere elementen van de array (slice).$array[1,2]— is ongeldig, leidt tot een fout. Voor toegang tot meerdere elementen van de array gebruik je alleen een slice@array[...].Voorbeeld:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
Verhaal
In een loggingproject probeerde een programmeur toegang te krijgen tot een element van de hash via
@colors{"red"}. Dit resulteerde in een willekeurige fout omdat voor een enkele waarde$in plaats van@nodig is.
Verhaal
In een service vergat men de juiste toegang te gebruiken tijdens het itereren over de indexen van de array — in plaats van
$array[$i]gebruikten ze@array$i, wat leidde tot waarschuwingen en onjuiste resultaten.
Verhaal
In een API-project werd een functie beschreven die een array als
$argsaccepteerde, maar bij de aanroep werd een array zonder scalaar doorgegeven:func(@list). Het bleek dat op deze manier de elementen van de array in een lijst "uitgevouwen" worden, en de functie werkte niet zoals verwacht. Het was correcter geweest om de array als@argste accepteren.