/ / Cosa significa {{hash {$ key}} in Perl? - perl, hashtable

Cosa significa @ {hash {$ key}} in Perl? - perl, hashtable

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.