hashmap - Perl 哈希没有按预期工作

标签 hashmap perl

#!/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/

相关文章:

visual-c++ - 破坏hash_map时产生崩溃

java - 双哈希java

java - Hashmap put(),是不是一直在排序?

java - 优化数据结构,例如 Map<String, Map<String, Map<String, Position>>>

perl - 如何从文件中读取并在 Perl 中执行 grep?

Java的hashmap : Is keys() indeed missing?

perl - Sublime 3 (Ubuntu) 中的交互式 Perl 编程

perl - 如何在Perl Template::Plugin::Date中切换时区?

perl - Perl,DBD::Oracle和Oracle 10g的字符集问题

perl - 如何在构建时根据输入创建(或不创建)类实例方法?