我有重复此模式的代码:
sub method1 {
my ($foo, $bar) = _get_things(); # this line...
}
sub method2 {
my ($foo, $bar) = _get_things(); # ...is repeated here
}
重复的行只是一行,所以从某种意义上说重复它没什么大不了的。但是,这有一个缺点,如果列表 ($foo, $bar)
发生变化,所有这些行都需要更改。在 C 语言中,可以使用预处理器来解决这个问题。在 Perl 中是否有一个好的习惯用法?类似于以下 psuedo-perl:
MACRO_DEFINITION my ($foo, $bar) = _get_things();
sub method1 {
MACRO_CALL
print "hi $foo";
}
sub method2 {
MACRO_CALL
print "hi $foo and $bar";
}
注意:_get_things()
返回我绑定(bind)到本地词法标量的列表的原因是我想在字符串插值中使用它们,如后一个示例所示。
最佳答案
当子组件具有多个参数,或者参数可能会更改时,您应该传递散列或散列引用来模拟命名参数。
这里更是如此,当您返回多个结果并且结果可能发生变化时,您应该从子返回一个哈希引用。只需在调用者中使用该 hashref(是的,即使在字符串插值中也是如此。)
use strict;
use warnings;
sub method2 {
my $thing = _get_things();
print "hi $thing->{'foo'} and $thing->{'bar'}\n";
}
sub _get_things {
return {
'foo' => 42,
'bar' => 'quux',
};
}
method2();
关于perl - 可重用、抽象的方式一次性绑定(bind)多个词法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38446044/