使用map函数操作Perl数组和哈希表

3
我有以下测试代码。
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个回答

6

您也可以使用哈希切片来避免使用map循环:

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

6

$extra被传递到map中,由于哈希表中没有与键值test对应的条目,因此该值为undef。在map周围加上括号以强制解析:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接