Jak odwołać się do elementu tablicy w Perl

Zadanie. W Perlu program ma tablicę. Trzeba odczytać wartość jednego z elementów tej tablicy.

Oto przykład jak to zrobić:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print $arr[1];

Jeśli zapisać tekst tego programu do pliku script.pl i uruchomić perl script.pl, to na ekranie pojawi się tekst two.

Więc, co tu się dzieje.

Najpierw stworzyliśmy tablicę z nazwą @arr. Zmienna-tablica zaczyna się od znaku @, symbol ten jest podobny do pierwszej literę od słowa "array". Stworzyliśmy tablicę i umieszczono w niej 3 elementy. W naszym przykładzie wszystkie 3 elementy — to wiersze, ale w ogóle w jednym tablicy mogą być elementy zupełnie różnych typów, na przykład, ciągi znaków, liczby i linki.

U każdego elementu w tablicy ma swój numer porządkowy. Ten pokój o nazwie "indeks". W języku programowania Perl, jak i w wielu innych języków programowania elementy tablicy zaczynają нумероваться z liczby 0. W przykładzie w tablicy zawiera 3 elementy:

  • wiersz 'one' — jest to element tablicy o indeksie 0
  • wiersz 'two' — jest to element tablicy o indeksie 1
  • wiersz 'three' — jest to element tablicy o indeksie 2

Aby odwołać się do elementu tablicy o indeksie 1 trzeba napisać $arr[1]. Piszemy nazwę tablicy i w kwadratowych nawiasie piszemy indeks elementu, który musimy zdobyć. Należy zwrócić uwagę na jedną cechę. Gdy zwracamy się do jednego elementu tablicy, to zamiast znaku @ w imieniu tablicy trzeba napisać symbol $ (znak dolara, symbol podobny do pierwszej literę w słowie "scalar"). Pomysł polegał na tym, że przy takim zapisie wyraźnie podkreślić, że musimy zdobyć jedną wartość, ale, moim zdaniem, jest to błąd w konstrukcji języka. To nic nie jemu, a wręcz przeciwnie stało się coraz trudniejsze. W języku programowania Perl6 to naprawiono, ale w Perl5 odnosząc się do elementu tablicy, należy użyć właśnie znak dolara $: $arr[1].

Zwrócić się do ostatniego elementu w tablicy

Podczas tworzenia tablicy @arr automatycznie pojawia się zmienna $#arr w którym zawiera indeks ostatniego elementu. Podczas dodawania/usuwania elementów z tablicy wartości tej zmiennej zmienia się automatycznie (i nawet można samemu zapisać liczbę w tej zmiennej).

Aby przejść do ostatniego elementu tablicy można korzystać z funkcji nagrywania $arr[$#arr]. Ale wygodniej używać $arr[-1]. Indeks -1 oznacza indeks ostatniego elementu w tablicy, indeks -2 — przedostatniej itd.

Niewłaściwy sposób

Oto przykład kodu (delikatnie, to zawiera błąd):

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print @arr[1]; # error

Ta opcja dokładnie tak samo jak i prawo, ale zamiast prawidłowego odwołania się do elementu tablicy za pomocą $arr[1]tu używany @arr[1].

Jeśli zapisać tekst tego programu do pliku script.pl i wykonać ją perl script.pl, to na ekranie pojawi się tekst two. Wiersz 'two', to naprawdę element z indeksem 1 w tablicy @arr, tak, że na pierwszy rzut oka błędy nie widać.

Ale jeśli dodać do kodu programu wiersz use warnings; (co prawie zawsze warto robić), to na wyjściu programu będzie widać ostrzeżenie:

Scalar value @arr[1] better written as $arr[1] at script.pl line 7.
two

Forma zapisu @arr[ ] jest uzyskanie kilku wartości z tablicy. To się nazywa "kawałek". Kilka przykładów:

  • @arr[1,2] — zwraca listę z dwóch elementów, elementy tablicy z indeksami 1 i 2
  • @arr[0..2] — zwraca listę z trzech elementów, elementy tablicy o indeksach 0, 1 i 2
  • @arr[1, 1] — zwraca listę z dwóch elementów, powtarza element z indeksem 1 dwa razy

Nagrywanie @arr[1] — zwraca listę z jednego elementu, oraz wyświetla ostrzeżenie.

Nagrywanie @arr[1,] — zwraca listę z jednego elementu, bez ostrzeżenia.

Jeśli potrzebujesz wartość jednego elementu z tablicy, to lepiej pisać $arr[1].

Tematy pokrewne

Inne artykuły