5

mysub次の 2 つの呼び出しが事実上同じになるように動作するサブルーチンを作成しようとしています。

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句は、引数が 1 つだけ渡されたこと、および引数が を使用した配列参照であることを確認しrefます。ケースが同じであることを確認するには:

sub mysub {
    if ( @_ == 1 && ref( $_[0] ) eq 'ARRAY' ) {
        @_ = @{ $_[0] };
    }
    # Rest of the code
}
于 2011-03-11T20:37:52.270 に答える