5

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

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

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

4

1 回答 1

18

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

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
}
于 2011-03-11T20:37:52.270 回答