programowanieProgramista Perl

Opisz szczegóły dotyczące pracy z zmiennymi w Perl. Czym różnią się zmienne skalarne, tablice i hasze? Podaj przykłady użycia każdego typu.

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź

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 klucza

Pytanie z podchwytliwością

Czym 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)

Przykłady rzeczywistych błędów z powodu braku znajomości szczegółów tematu


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.