$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?
}
ただし、優先度を検出するためにキーを並べ替える必要があります(%FONT%の前に%CMD%が置き換えられた場合、$ tasks-> {$ tid} {report}は間違っています)。
foreach my $parm ( &SORTME($tasks->{$tid}) ) {&lookupValuesFor($tid,$parm); }
指定された変数の数とそれらの関係に応じてソートするための最良の方法は何ですか?ネイティブのもの(多くのループとハッシュ)、またはexpat [関連する質問はどういうわけか私をexpatに向けています、それも調査します:ネストされたパターンの文字列の解析]または他のパーサー?
$ object-> value('cmdline')のOOPメソッドは現在好まれていません。