Qualcuno potrebbe dirmi cosa? @{hash{$key}}
si intende? e se fossi giusto quando scrissi @{hash{$key}}[$i]=$list[$i+1]
?
risposte:
7 per risposta № 1@{hash{$key}}
è un modo strano di scrivere
@hash{$key}
Questo è chiamato una fetta di hash. Ti permette di recuperare più valori da un hash in un colpo solo. Per esempio,
say for @hash{"a", "b"};
si intende
say for $hash{a}, $hash{b};
Quindi è piuttosto sciocco da usare
@hash{$key}
invece di
$hash{$key}
@{hash{$key}}[$i]=$list[$i+1];
non si compila, quindi no, non era corretto usarlo.
3 per risposta № 2
Come spiega Ikegami, @{hash{$key}}
è una slice hash (di un solo elemento).
È probabile che tu voglia questo invece: @{$hash{$key}}
. Se ogni elemento del tuo hash è un riferimento di matrice, questa sintassi ti consentirebbe di accedere alla matrice.
Ad esempio, supponiamo che il tuo hash contenesse array, come questo:
my %hash = (
foo => [1, 2, 3, 4, 5],
bar => [qw/baz sproing blargh/]
);
@{$hash{foo}}
sarebbe (1, 2, 3, 4, 5)
Se questo è il caso, questa sintassi funzionerebbe:
${$hash{$key}}[$i]=$list[$i+1]
Si noti che si sta solo accedendo a un elemento dell'array, non all'intero array. Quindi tu usi ${$hash{$key}}
invece di @{$hash{$key}}
.
Un altro modo di fare la stessa cosa è questo:
$hash{$key}->[$i]=$list[$i+1]
Il ->
la sintassi per il dereferenziamento è spesso preferibile a ${...}
, perché è più pulito, soprattutto quando si dispone di una struttura dati complessa.