我试图遍历配置文件中的所有值并将数据放入数组中。我只需要将块作为键,然后将设置名称作为值。
#Config File looks like this
[Actions]
action=0
actionCR=1
actionHighlight=1
[Hotkeys]
key=38
keyCR=32
keyHighlight=39
[Settings]
chbAcronym=1
chbCompleted=0
# End Config
my %settingsTemplate;
my $settingsTemplate;
# Loop over each section in the template
foreach my $section (keys %{$cfg}) {
# Loop over all the setting titles
foreach my $parameter (keys %{$cfg->{$section}}) {
# Push setting titles to an array
$settingsTemplate->{$section} = $parameter;
}
}
print Dumper($settingsTemplate);
$VAR1 = {
'Hotkeys' => 'key',
'Actions' => 'actionCR',
'Settings' => 'chbAcronym'
};
这是打印数组的方式,这不是我需要的。
这是所需的输出(不确定我的格式是否正确但希望你能理解它。
$VAR1 = {
'Hotkeys',
=> 'key',
=> 'keyCR',
=> 'keyHighlight',
'Actions',
=> 'action',
=> 'actionCR',
=> 'actionHighlight',
'Settings',
=> 'chbAcronym',
=> 'chbCompleted'
};
答案 0 :(得分:4)
试试这个:
push @{$settingsTemplate->{$section}}, $parameter;
答案 1 :(得分:1)
根据建议,使用数组哈希并推送。
请注意,您不会按照文件中的顺序获取密钥;我建议改变:
foreach my $parameter (keys %{$cfg->{$section}}) {
到
foreach my $parameter (sort keys %{$cfg->{$section}}) {
所以他们有一致的顺序,而不是一个变化的顺序。
虽然实际上不需要内部for循环;你可以这样做:
# Loop over each section in the template
foreach my $section (keys %{$cfg}) {
# Put setting titles into an array
$settingsTemplate->{$section} = [ sort keys %{$cfg->{$section}} ];
}
甚至更简洁:
my $settingsTemplate = { map { $_, [ sort keys %{$cfg->{$_}} ] } keys %$cfg };
答案 2 :(得分:0)
您的代码执行分配而不是推送。 Perl中的哈希值默认只保存一个值。你想要一个数组哈希。
http://perldoc.perl.org/perldsc.html#HASHES-OF-ARRAYS
# Loop over each section in the template
foreach my $section (keys %{$cfg}) {
# Loop over all the setting titles
foreach my $parameter (keys %{$cfg->{$section}}) {
# Push setting titles to an array
push @{$settingsTemplate->{$section}}, $parameter;
}
}