如何在Perl中将哈希插入哈希

Pas*_*sha 11 perl hash

我在主文件中的某处定义了一个简单的哈希

our %translations = (
    "phrase 1" => "translation 1",
    # ... and so on 
    );
Run Code Online (Sandbox Code Playgroud)

在另一个文件中,我想添加更多翻译.也就是说,我想做这样的事情:

push our %translations, (
    "phrase N" => "blah-blah",
    # ....
    "phrase M" => "something",
    );
Run Code Online (Sandbox Code Playgroud)

当然这段代码不起作用:push不适用于哈希.所以我的问题是:将一个值的哈希值插入到现有哈希中的简单而优雅的方法是什么?

我不想诉诸

$translations{"phrase N"} = "blah-blah";
# ....
$translations{"phrase M"} = "something";
Run Code Online (Sandbox Code Playgroud)

因为在Perl中你应该能够在你的代码中没有太多重复的情况下做事情......

Tud*_*tin 16

%translations = (%translations, %new_translations);
Run Code Online (Sandbox Code Playgroud)


cjm*_*cjm 9

您可以使用函数分配哈希切片.只要在调用之间没有修改散列,keys就会以values返回值的相同顺序返回键.

our %translations = (
  "phrase 1" => "translation 1",
);

{ # Braces just to restrict scope of %add
  my %add = (
    "phrase N" => "blah-blah",
    "phrase M" => "something",
  );
  @translations{keys %add} = values %add;
}

# Or, using your alternate syntax:
@translations{keys %$_} = values %$_ for {
  "phrase N" => "blah-blah",
  "phrase M" => "something",
};
Run Code Online (Sandbox Code Playgroud)

  • 这有帮助!我甚至可以把它写成`@translations {keys%$ _} = values $%_ for {"phrase N"=>"blah-blah",...};` (2认同)

Eug*_*ash 6

您可以分配给哈希切片:

@translations{@keys} = @values;
Run Code Online (Sandbox Code Playgroud)

或使用其他哈希的数据:

@translations{keys %new} = values %new;
Run Code Online (Sandbox Code Playgroud)


Kar*_*ath 5

%translations = (
    "phrase N" => "blah-blah",
    # ....
    "phrase M" => "something",
    %translations
    );
Run Code Online (Sandbox Code Playgroud)