perl - 可重用、抽象的方式一次性绑定(bind)多个词法

标签 perl

我有重复此模式的代码:

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/

相关文章:

perl - 解析树和字节码是一回事吗?

perl - NGINX 不执行 perl 脚本?

Perl 算法:排列和列表::AllUtils (uniq)

perl - 用 perl 打印列表的前几个元素

使用 utf8 时不输出 Perl 警告、严格错误和诊断错误

regex - GREP 获取包含给定字符串的所有字符串

html - 使用 Perl 解析 html

regex - 将字符串拆分为标记并在 Perl 中存储分隔符

perl - Cron 没有在 PERL 中执行我的 system() 语句