2010-03-08 5 views
3

J'ai le code de test suivanttableau Perl et la manipulation de hachage en utilisant la carte

use Data::Dumper; 

my $hash = { 
      foo => 'bar', 
      os => 'linux' 
      }; 

my @keys = qw (foo os); 

my $extra = 'test'; 

my @final_array = (map {$hash->{$_}} @keys,$extra); 

print Dumper \@final_array; 

La sortie est

$VAR1 = [ 
      'bar', 
      'linux', 
      undef 
     ]; 

Si pas les éléments être "bar, linux, test"? Pourquoi le dernier élément est-il indéfini et comment insérer un élément dans @final_array? Je sais que je peux utiliser la fonction push, mais est-il possible de l'insérer sur la même ligne que la commande map?

Fondamentalement, le tableau manipulé est destiné à être utilisé dans une commande SQL dans le script réel et je veux éviter d'utiliser des variables supplémentaires avant que et au lieu de faire quelque chose comme:

$sql->execute(map {$hash->{$_}} @keys,$extra); 

Répondre

6

$extra est transmis par la map et puisqu'il n'y a aucune entrée dans le hachage avec la clé test la valeur est undef. Mis entre parenthèses map pour forcer l'analyse syntaxique:

$sql->execute((map {$hash->{$_}} @keys),$extra); 
6

Vous pouvez également utiliser une tranche de hachage pour éviter une boucle sur la carte:

my @final_array = (@$hash{@keys}, $extra); 
Questions connexes