Czy ktoś może mi to powiedzieć? @{hash{$key}}
znaczy? i czy miałem rację, kiedy pisałem @{hash{$key}}[$i]=$list[$i+1]
?
Odpowiedzi:
7 dla odpowiedzi № 1@{hash{$key}}
to dziwny sposób pisania
@hash{$key}
Nazywa się to skrótem mieszającym. Pozwala pobierać wiele wartości z hasha za jednym razem. Na przykład,
say for @hash{"a", "b"};
znaczy
say for $hash{a}, $hash{b};
Więc jest to dość głupie
@hash{$key}
zamiast
$hash{$key}
@{hash{$key}}[$i]=$list[$i+1];
nie kompiluje się, więc nie, nie było w porządku z niego korzystać.
3 dla odpowiedzi № 2
Jak wyjaśnia ikegami, @{hash{$key}}
jest fragmentem skrótu (tylko jednego elementu).
Prawdopodobnie zamiast tego chcesz: @{$hash{$key}}
. Jeśli każdy element twojego skrótu jest odwołaniem do tablicy, ta składnia umożliwi dostęp do tablicy.
Na przykład załóżmy, że twój hasz zawierał tablice, takie jak to:
my %hash = (
foo => [1, 2, 3, 4, 5],
bar => [qw/baz sproing blargh/]
);
@{$hash{foo}}
byłoby (1, 2, 3, 4, 5)
Jeśli tak, to ta składnia będzie działać:
${$hash{$key}}[$i]=$list[$i+1]
Zauważ, że uzyskujesz dostęp tylko do elementu tablicy, a nie do całej tablicy. W ten sposób używasz ${$hash{$key}}
zamiast @{$hash{$key}}
.
Innym sposobem robienia tego samego jest:
$hash{$key}->[$i]=$list[$i+1]
The ->
Składnia do dereferencji jest często preferowana ${...}
, ponieważ jest czystszy, zwłaszcza gdy masz złożoną strukturę danych.