我正在寻找一个子例程mysub,该子例程的行为应确保以下两个调用实际上是相同的。

mysub(["values", "in", "a", "list"]);
mysub("Passing", "scalar", "values");

实现此目的的正确语法是什么?

最佳答案

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

sub mysub {
    if ( @_ == 1 && ref( $_[0] ) eq 'ARRAY' ) {
        # Single array ref
    } else {
        # A list
    }
}
if子句检查是否仅传递了一个参数,并且该参数是使用 ref 的数组引用。为确保情况相同:
sub mysub {
    if ( @_ == 1 && ref( $_[0] ) eq 'ARRAY' ) {
        @_ = @{ $_[0] };
    }
    # Rest of the code
}

10-06 15:09