2012-08-17 14 views

Respuesta

14

sólo tiene que utilizar el mapa para crear una lista a continuación, colocar en una referencia a un hash como:

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

Actualización: lo siento, esto no lo hace haz lo que quieras exactamente, ya que todavía tienes que declarar $ has_field primero.

Se puede usar un trozo de hash:

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

El lado derecho está utilizando el operador x repetir uno por el valor escalar de @fields (es decir, el número de elementos en la matriz). Otra opción en la misma línea:

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

Esto funciona correctamente, pero aún así se requiere declarar '$ has_field' por separado cuando se usa' use strict; '. Sin embargo, es un buen truco saberlo. –

2

Donde he probado smart match puede ser de 2 a 5 veces más rápido que la creación de un hash de búsqueda y pruebas para el valor vez. Así que a menos que usted va a volver a utilizar el hash de un buen número de veces, lo mejor es hacer un partido inteligente:

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

Es una buena cosa que recordar que desde 5.10, Perl ahora tiene una manera nativa a pregunte "es este valor no probado cualquiera de estos valores conocidos", es coincidencia inteligente.

+0

Gracias por este gran consejo. Definitivamente voy a poner eso en uso. – dan1111

Cuestiones relacionadas