#!/usr/bin/perl
sub f { {
a => 1,
b => 2
} }
sub g { {
%{f()},
c => 3,
d => 4,
} }
use Data::Dumper;
print Dumper g();
以上代码输出
$VAR1 = 'a';
$VAR2 = 1;
$VAR3 = 'b';
$VAR4 = 2;
$VAR5 = 'c';
$VAR6 = 3;
$VAR7 = 'd';
$VAR8 = 4;
尽管在我的理解中它应该输出
$VAR1 = {
'a' => 1,
'c' => 3,
'b' => 2,
'd' => 4
};
我的误解是什么?
最佳答案
问题是一对大括号在 Perl 中是不明确的,可能是 block 或匿名散列
由于 g
中的散列内容(请使用更好的名称)perl 假定您正在编写一个代码块,它只是一个标量值列表
像这样让它更明确,您的代码将按预期运行
use strict;
use warnings 'all';
sub foo {
{
a => 1,
b => 2,
}
}
sub bar {
my $href = {
%{ foo() },
c => 3,
d => 4,
}
}
use Data::Dump;
dd bar();
输出
{ a => 1, b => 2, c => 3, d => 4 }
关于hashmap - Perl 哈希没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613242/