Perl创建子例程

示例

子例程是通过使用关键字,sub后跟一个标识符和用大括号括起来的代码块创建的。

您可以使用特殊变量来访问参数,该变量@_包含所有参数作为数组。

sub function_name {
    my ($arg1, $arg2, @more_args) = @_;
    # ...
}

由于该函数在子例程中使用时shift默认为平移@_,因此一种常见的模式是在子例程开始时将参数顺序提取到局部变量中:

sub function_name {
    my $arg1 = shift;
    my $arg2 = shift;
    my @more_args = @_;
    # ...
}

# emulate named parameters (instead of positional)
sub function_name {
    my %args = (arg1 => 'default', @_);
    my $arg1 = delete $args{arg1};
    my $arg2 = delete $args{arg2};
    # ...
}

sub {
    my $arg1 = shift;
    # ...
}->($arg);

5.20.0

或者,"signatures"可以使用实验功能来解包参数,这些参数是通过值(而不是通过引用)传递的。

use feature "signatures";

sub function_name($arg1, $arg2, @more_args) {
    # ...
}

参数可以使用默认值。

use feature "signatures";

sub function_name($arg1=1, $arg2=2) {
    # ...
}

您可以使用任何表达式为参数提供默认值-包括其他参数。

sub function_name($arg1=1, $arg2=$arg1+1) {
    # ...
}

请注意,您不能引用在当前参数之后定义的参数-因此,以下代码无法正常工作。

sub function_name($arg1=$arg2, $arg2=1) {
    print $arg1;  # => <nothing>
    print $arg2;  # => 1
}