动态创建哈希的哈希与数组ref值



我想动态创建一个如下结构:

{  
   edition1 => {  
                 Jim => ["title1", "title2"],  
                 John => ["title3", "title4"],  
              },  
  edition2 => { 
                 Jim => ["titleX",],  
                 John => ["titleY,],  
              }  etc
}  

我不知道该怎么做。
基本上我是这样想的:

my $edition = "edition1";  
my $author = "Jim";  
my $title = "title1";  
my %main_hash = ();  
${$main_hash{$edition}} ||= {};   
${$main_hash{$edition}}->{$author} ||= [];     
push @{{$main_hash{$edition}}->{$author}} , $title;   

但不知何故,我不确定如何才能正确地做到这一点,语法似乎非常复杂。
我怎样才能以一种漂亮/清晰的方式实现我想要的?

你把事情弄得很困难。Perl有自动激活,这意味着它会神奇地为您创建任何必要的散列或数组元素,如果您使用它们,就好像它们包含数据引用

你行

push @{{$main_hash{$edition}}->{$author}} , $title;

是你最接近的,但是你在$main_hash{$edition}周围有一对额外的花括号,它试图创建一个匿名哈希,$main_hash{$edition}作为唯一的键,undef作为值。也不需要在左括号和右括号之间使用间接箭头

这个程序展示了如何使用Perl的功能来更简洁地编写

use strict;
use warnings;
my %data;
my $edition = "edition1";
my $author  = "Jim";
my $title   = "title1";
push @{ $data{$edition}{$author} }, $title;
use Data::Dump;
dd %data;

输出
{ edition1 => { Jim => ["title1"] } }

最新更新