如何创建一个接受数组*或*可变数量标量的子程序?

ajw*_*ood 5 arrays perl scalar

我正在寻找一个子程序mysub,它应该表现为以下两个调用实际上是相同的.

mysub(["values", "in", "a", "list"]);
mysub("Passing", "scalar", "values");
Run Code Online (Sandbox Code Playgroud)

实现这一目标的正确语法是什么?

Tim*_*Tim 18

检查是否@_包含单个数组引用.

sub mysub {
    if ( @_ == 1 && ref( $_[0] ) eq 'ARRAY' ) {
        # Single array ref
    } else {
        # A list
    }
}
Run Code Online (Sandbox Code Playgroud)

if子句检查是否只传递了一个参数,并且该参数是使用的数组引用ref.为了确保案例是相同的:

sub mysub {
    if ( @_ == 1 && ref( $_[0] ) eq 'ARRAY' ) {
        @_ = @{ $_[0] };
    }
    # Rest of the code
}
Run Code Online (Sandbox Code Playgroud)