私は、このようにヘルパー関数での発送のハッシュとして実装される機能のセットを持つモジュールを持っている:たPerl:派遣ハッシュと共有変数
my $functions = {
'f1' => sub {
my %args = @_;
## process data ...
return $answer;
},
[etc.]
};
sub do_function {
my $fn = shift;
return $functions->{$fn}(@_);
}
。これは、そのプロセスタブ区切りのデータをいくつかのスクリプトによって使用されます。調べる列は適切なサブルーチンによって変換されます。列の値を処理するとき、データのハッシュをサブに渡し、列の新しい値であるスカラーを生成します。 、私の$はERRS、など。他の値を更新することが可能である私の$データ -
my $new_value = do_function('f1', data => $data, errs => $errs);
と引数の変数は、すべての「私」として宣言されます。
は現在、潜水艦は、このように呼ばれていますそれらを返さなくてもサブシステムに渡される引数には?すなわち、代わりにこれを実行することの:私はこれを行うことができます
... in $functions->{f1}:
my %args = @_;
## process data ...
## alter $args{errs}
$args{errs}->{type_one_error}++;
## ...
return { answer => $answer, errs => $args{errs} };
...
## call the function, get the response, update the errs
my $return_data = do_function('f1', data => $data, errs => $errs);
my $new_value = $return_data->{answer};
$errs = $return_data->{errs}; ## this has been altered by sub 'f1'
:
my $new_value = do_function('f1', data => $data, errs => $errs);
## no need to update $errs, it has been magically updated already!
キーの一部/すべてをローカライズ美しい、感謝:あなたはすべての新しい値をコピーしたい場合は、のいずれかを使用することができます! –
@girlwithglassesさん、ありがとうございます。これで問題は解決しますか? – yko
はい、それは私のperlの生活を最も楽しくしました。ありがとうございました! –