簡體   English   中英

如何從哈希哈希中獲取哈希切片?

[英]How do I get a hash slice from a hash of hashes?

我有這樣的哈希:

my %h = ( a => { one => 1,
                 two => 2
             },
          b => { three => 3,
                 four => 4
             },
          c => { five => 5,
                 six => 6
             }
      );

print join(',', @{$h{a}{qw/one two/}});

我得到的錯誤是:不能使用未定義的值作為q.pl第17行的ARRAY引用,這是打印行。

我的預期是1,2

要從嵌套哈希中獲取哈希切片,您必須逐步取消引用它。 你得到了你需要的第一級:

$h{'a'}

現在,你必須取消引用它作為哈希。 但是,由於它不是一個簡單的標量,你必須把它放在括號中。 要獲得整個哈希值,您需要在大括號前加一個%

%{ $h{'a'} }

現在你想要一個切片,所以你用@替換% ,因為你得到了多個元素,並且你也正常地將你的鍵放在最后:

@{ $h{'a'} }{ @keys }

分別看到大括號可能更容易:

@{         }{       }
   $h{'a'}    @keys

為了簡化這一點,v5.20引入了后綴解除引用 您可以從左到右工作,而不是將東西包在支架中並從內到外工作:

$h{a}->@{qw/one two/};

那個@就像你在第一個支架前看到的一樣。 你仍然知道它是一個哈希切片,因為支撐跟隨着這個印記。

嘗試

print join(',',@{$h{'a'}}{qw/one two/});

Data :: Dumper的使用極大地有助於像這樣的情況

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM