【发布时间】:2011-11-15 17:58:33
【问题描述】:
我有一个带有一组函数的模块,这些函数被实现为带有辅助函数的调度散列:
my $functions = {
'f1' => sub {
my %args = @_;
## process data ...
return $answer;
},
[etc.]
};
sub do_function {
my $fn = shift;
return $functions->{$fn}(@_);
}
这被一些处理制表符分隔数据的脚本使用;正在检查的列由适当的子程序转换。在处理列中的值时,我将数据哈希传递给 sub,它会生成一个标量,即该列的新值。
目前潜艇是这样称呼的:
my $new_value = do_function( 'f1', data => $data, errs => $errs );
并且参数中的变量都被声明为'my' - my $data、my $errs 等。是否可以更新传递给 subs 的参数中的其他值而不必返回它们?即不必这样做:
... 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!
【问题讨论】:
标签: perl variables scope anonymous-function