som*_*ody 3 arrays sqlite perl 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;
Run Code Online (Sandbox Code Playgroud)
输出是
$VAR1 = [
'bar',
'linux',
undef
];
Run Code Online (Sandbox Code Playgroud)
难道元素不应该是"bar,linux,test"吗?为什么最后一个元素未定义,如何将元素插入@final_array?我知道我可以使用push函数但是有没有办法将它插入到与使用map命令相同的行上?
基本上,操作数组意味着在实际脚本中的SQL命令中使用,我想避免在此之前使用额外的变量,而是执行以下操作:
$sql->execute(map {$hash->{$_}} @keys,$extra);
Run Code Online (Sandbox Code Playgroud)
$extra正在传递map,因为哈希中没有条目,键值test是undef.在括号周围加上括号map以强制解析:
$sql->execute((map {$hash->{$_}} @keys),$extra);
Run Code Online (Sandbox Code Playgroud)
小智 6
您还可以使用哈希切片来避免使用map进行循环:
my @final_array = (@$hash{@keys}, $extra);
Run Code Online (Sandbox Code Playgroud)