【发布时间】:2015-06-29 15:23:18
【问题描述】:
我正在使用 AppConfig 做一些工作,但为了方便起见,我希望选项数组有另一个数据元素(这里称为 'SWITCH')。
AppConfig 的 define() 函数的典型输入是 (string, hashref) 对的列表,例如
"cfg" => { ALIAS => 'c',ARGS => "=s"},
现在,为了便于维护一个很长的配置选项列表,我用一个新键(称为“SWITCH”)扩展了它,我在程序执行期间使用它来做家务,在参数之后被处理。
示例:
source => {
SWITCH => '/File',
ALIAS => "file",
ARGS => "=s",
},
AppConfig 当然不喜欢这样,如果遇到SWITCH 键就会产生错误。因此,在将选项列表传递给 define() 之前,我需要切出 SWITCH 及其每个选项的值。
按照前面的示例,结果将是:
source => {
ALIAS => "file",
ARGS => "=s",
},
我有一些这样的代码(%qcfg 是一个包含define() 的选项列表的哈希;是的,我知道 AppConfig 将其视为一个列表,但将其用作哈希更容易,然后将其展平将列表传递给define()):
my %newcfg = map {
my $hashref = $qcfg{$_};
$_ => +{map ($_ => $hashref->{$_}, grep (!/^SWITCH$/, keys %{$hashref}))}
} keys %qcfg;
但是 %newcfg 出现时是一团糟,所以我没有做对。如何让它正确操作哈希?
【问题讨论】:
-
我不太明白你的问题。你能举个更好的例子吗?