$tasks->{t1}{cmdline} = "convert -f %FONT% %1%";
$tasks->{t1}{report} = "Launched as %CMD% by %USER%";
$tid = 't1';
foreach my $parm (keys %{$tasks->{$tid}}) {
$tasks->{$tid}{$parm}=~s/%FONT%/$tasks->{$tid}{font}/g; # may evaluate if $parm == 'cmdline';
$tasks->{$tid}{$parm}=~s/%CMD%/$tasks->{$tid}{cmdline}/g;
}
代码很糟糕,因为它需要在 foreach 之外进行另一个循环(以确保所有复制的值都被替换),并且还包含太多的文本数据。目前最好的重写方法如下:
foreach my $parm (keys %{$tasks->{$tid}}) {
&lookupValues(\$tasks->{$tid}{&parm}); # or ($parm) if strict refs?
}
然而,它仍然需要对键进行排序以检测优先级(如果 %CMD% 在 %FONT% 之前被替换,则 $tasks->{$tid}{report} 是错误的)。
foreach my $parm ( &SORTME($tasks->{$tid}) ) {&lookupValuesFor($tid,$parm); }
根据指定变量的数量及其关系进行排序的最佳方法是什么?原生的(大量循环和散列),或 expat [相关问题以某种方式将我指向 expat,也会对其进行调查:Parsing a string for nested patterns ] 或其他解析器?
现在不喜欢 $object->value('cmdline') 的 OOP 方式。