2010-11-09 59 views
0

给定三个标量,填充散列的perl语法是什么,其中一个标量是关键字,另一个语法决定填充两个数组中的哪一个,第三个被附加到其中一个数组?例如:在perl中填充多维数组的散列值

my $weekday = "Monday"; 
my $kind = "Good"; 
my $event = "Birthday"; 

,并只给出了标量,而不是其特定的值,在循环中获得的,我想一个散列,如:

my %Weekdays = { 
     'Monday' => [ 
        ["Birthday", "Holiday"],  # The Good array 
        ["Exam", "Workday"]   # The Bad array 
        ] 
     'Saturday' => [ 
        ["RoadTrip", "Concert", "Movie"], 
        ["Yardwork", "VisitMIL"] 
        ] 
} 

我知道如何将一个值追加到一个数组哈希,例如,如果关键是一个数组:

push(@{ $Weekdays{$weekday} }, $event); 

用在一个循环,这可能给我:

%Weekdays = { 
     'Monday' => [ 
        'Birthday', 
        'Holiday', 
        'Exam', 
        'Workday' 
        ] 
} 

我想散列键是特定的星期几,并且该值应该是一个二维数组。我不知道perl语法,比如说,将Birthday作为weekday数组的元素[0] [0]推入散列,然后在循环中下一次将另一个事件推入[0] [1]或[1] [0]。同样,我不知道访问它的语法。

回答

3

使用的变量,我会写这样的:

push @{ $Weekdays{ $weekday }[ $kind eq 'Good' ? 0 : 1 ] }, $event; 

不过,我可能只是使好/坏符为好。并给予我能选择的话:

use autobox::Core; 
($Weekdays{ $weekday }{ $kind } ||= [])->push($event); 

请注意,我在这里写的方式,既表达关心的数组中是否存在我们开始之前。

+1

这样做的技巧,谢谢。我也赞赏使用哈希散列的想法。不过,我必须先重构一些其他的东西。 – jasper77 2010-11-09 22:15:19

1

是有一些原因,

push @{ $Weekdays{Monday}[0] }, "whatever"; 

工作不适合你?