Perl子程序参数如散列

9
如何创建一个子程序来解析这样的参数:
&mySub(arg1 => 'value1', arg2 => 'value2' ...);

sub mySub() {
    # what do I need to do here to parse these arguments?
    # no arguments are required
}

7
不应使用&mySub语法来调用函数;只需使用mySub即可。请参见什么情况下应使用&来调用Perl子例程? - ThisSuitIsBlackNot
2
FYI(供参考,也为了未来的谷歌搜索者,因为这似乎是一个很好的规范问题),你所描述的通常被称为“命名参数”或“命名参数”。 - ThisSuitIsBlackNot
1
@ThisSuitIsBlackNot:那个问题讨论了何时应该使用&以及何时绝对不应该使用。它及其答案并不支持广泛的“您不应该使用&调用函数”的法令。 - ysth
2
@ysth 或许我应该在我的评论前加上“一般来说”。在这里使用 & 语法的绝大多数人认为它对所有函数调用都是必需的,而且根本不知道其含义,因此我认为说“不要那样做”并包含一个更细致的解释链接就足够了。 - ThisSuitIsBlackNot
2个回答

19

只需将输入数组分配给哈希表:

sub my_sub {
    my %args = @_;
    # Work with the %args hash, e.g.
    print "arg1: ", $args{arg1};
}

如果您想提供默认值,可以使用:

sub my_sub {
    my %args = ( 'arg1' => 'default arg1',
                 'arg2' => 'default arg2',
                 @_ );
    # Work with the (possibly default) values in %args
}

0

也许你会发现Method::Signatures模块非常有用,它可以让你做类似这样的事情:

func MySub (Str :$arg1 = 'default arg1', Str :$arg2 = 'default arg2') {
    print "arg1: ", $arg1};
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接