Internetowe Bazy Danych - wykład 12 Hasz jest nieuporządkowanym zbiorem skalarów. Udostępnia swoje wartości nie przez podanie kolejnego ich numeru a poprzez wywołanie napisu z nimi skojarzonego. Hasze nazywane są bardzo często tablicami asocjacyjnymi. W przeciwieństwie do typowych tablic mają one strukturę nieuporządkowaną więc nie można na nich działać poleceniami typu push i pop. Klucze do hasza nie zależą od położenia dlatego podczas wprowadzania określonych elementów trzeba dostarczyć klucz i wartość. Nic nie stoi na przeszkodzie aby przypisać haszowi listę tak jak było to robione przy zwykłych tablicach, lecz tutaj każda para elementów będzie traktowana automatycznie jako para typu klucz/wartość. Przed haszem zamiast "małpy stoi jednak znak procenta %. Przykładowy hasz może wyglądać następująco: %rok = ("St", "styczeń", "Lt", "luty", "Ma", "marzec", "Kw", "kwiecień", "Maj", "maj", "Cz", "czerwiec", "Lip", "lipiec", "Si", "sierpień", "Wrz", "wrzesień", "Pa", "październik", "Lis", "listopad", "Gr", "grudzień");
Jak widać hasz zawiera 12 kluczy i 12 odpowiadających im wartości. Jest on napisany poprawnie jednak dosyć nieczytelnie i gdyby było więcej par klucz/wartość to znalezienie jakiejś konkretnej byłoby dosyć czasochłonne. Dlatego w Perlu zamiast przecinka odgradzającego klucze od wartości można użyć separatora =>. Po zamianie wygląda to tak:
%rok = (
"St" => "styczeń",
"Lt" => "luty",
"Ma" => "marzec",
"Kw" => "kwiecień",
"Maj" => "maj",
"Cz" => "czerwiec",
"Lip" => "lipiec",
"Si" => "sierpień",
"Wrz" => "wrzesień",
"Pa" => "październik",
"Lis" => "listopad",
"Gr" => "grudzień"
);
Niewątpliwie jest to o wiele bardziej przejrzysta forma zapisu dłuższego hasza.
Pojedynczy element z hasza jest wybierany za pomocą nawiasów klamrowych. Gdyby trzeba było znaleźć wartość skojarzoną z kluczem "Si" w tym haszu trzeba by było użyć konstrukcji $rok{"Si"). Wyrażenie to zwróci wartość "sierpień". Nadal jednak jako typ zmiennej używamy skalara - czyli znak $ a nie %, mimo iż właśnie tak oznaczamy tablice hasza.
Perl pozwala konwertować zwykłe tablice na tablice asocjacyjne (hasze) i na odwrót:
@tabelal = %rok #teraz @tabelal ma ułożenie takie jak pierwszy nieuporządkowany zapis hasza %rok powyżej z tym, że odwołujemy się do niego według zasad normalnej tablicy tzn. liczbowo
%rokl = 0tabelal #od teraz hasz %rokl ma taką samą zawartość jak %rok
-7-