2012-08-17 11 views

risposta

14

Basta usare la vostra mappa per creare una lista poi cadere in un riferimento ad hash come:

my $has_field = { map { $_ => 1 } @fields }; 
3

Aggiornamento: mi dispiace, questo non lo fa fai quello che vuoi esattamente, dato che devi ancora dichiarare $ has_field per primo.

Si potrebbe utilizzare una fetta hash:

@{$has_field}{@fields} = (1)[email protected]; 

La destra sta usando l'operatore x di ripetere uno dal valore scalare di @Campi (vale a dire il numero di elementi nella propria matrice). Un'altra opzione nella stessa vena:

@{$has_field}{@fields} = map {1} @fields; 
+0

Questo funziona correttamente ma richiede ancora dichiarare '$ has_field' separatamente quando si usa' use strict; '. È comunque un buon trucco per saperlo. –

2

Dove ho provato smart match può essere da 2 a 5 volte più veloce la creazione di un hash di ricerca e sperimentazione per il valore volta. Quindi, a meno che non si sta andando a riutilizzare l'hash di un buon numero di volte, è meglio fare una partita intelligente:

if ($cand_field ~~ \@fields) { 
    do_with_field($cand_field); 
} 

E 'una buona cosa da ricordare che dal 5.10, Perl ha ora un modo nativo a chiedere "è questo valore non testato nessuno di questi valori noti", è partita intelligente.

+0

Grazie per questo fantastico consiglio. Lo userò sicuramente. – dan1111