Perl数组和使用map的哈希操作

时间:2010-03-08 13:57:43

标签: perl arrays sqlite hash

我有以下测试代码

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;

输出

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

元素不应该是“bar,linux,test”吗?为什么最后一个元素未定义,如何将元素插入@final_array?我知道我可以使用push函数但是有没有办法将它插入到与使用map命令相同的行上?

基本上,被操作的数组意味着在实际脚本中的SQL命令中使用,我想避免在此之前使用额外的变量,而是执行以下操作:

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

2 个答案:

答案 0 :(得分:6)

$extra正在map传递,因为密钥test的哈希中没有条目,值为undef。在map周围放置括号以强制解析:

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

答案 1 :(得分:6)

您还可以使用哈希切片来避免使用map:

进行循环
my @final_array = (@$hash{@keys}, $extra);