W Perl zmienne dzielą się na skalary ($), tablice (@) i hasze (%):
Skalary ($variable) – przechowują jedną wartość (string, liczba):
my $name = "Ivan"; my $age = 30;
Tablice (@array) – zbiór uporządkowanych elementów (indeksowanych liczbami):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Hasze (%hash) – zbiór par klucz-wartość (tablica asocjacyjna):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Zwróć uwagę, że do odwołania się do elementu używa się specyficznego symbolu w zależności od typu zmiennej:
$array[0] — element tablicy$hash{"key"} — wartość hasha według kluczaCzym różnią się wyrażenia @array[1,2] i $array[1,2]?
Odpowiedź:
@array[1,2]— zwraca listę z wieloma elementami tablicy (wycinek).$array[1,2]— błędne, prowadzi do błędu. Do uzyskania wielu elementów tablicy używaj tylko wycinka@array[...].Przykład:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
Historia
W projekcie logowania programista odwołał się do elementu hasha przez
@colors{"red"}. W rezultacie uzyskiwał nie wartość hasha, a losowy błąd, ponieważ do pojedynczej wartości potrzebny był$, a nie@.
Historia
W jednym serwisie do iteracji po indeksach tablicy zapomniano użyć poprawnego odwołania — zamiast
$array[$i]użyto@array$i, co prowadziło do ostrzeżeń i błędnych wyników.
Historia
W projekcie API opisano funkcję, która przyjmuje tablicę jako
$args, a podczas wywołania przekazywano tablicę bez skalarów:func(@list). Okazało się, że w ten sposób elementy tablicy są "rozkładane" na listę, a funkcja działała nie tak, jak oczekiwano. Prawidłowo należało przyjmować tablicę jako@args.