像散列一样的 Perl 子例程参数

Perl subroutine arguments like a hash

如何创建一个可以像这样解析参数的子例程:

&mySub(arg1 => 'value1', arg2 => 'value2' ...);

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

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

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
}

也许您还会发现 Method::Signatures 模块非常有用,它允许您执行类似的操作:

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