【问题标题】:How do I make a subroutine that accepts an array *or* a variable number of scalars?如何制作一个接受数组*或*可变数量标量的子程序?
【发布时间】:2011-07-13 18:38:35
【问题描述】:

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

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

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

【问题讨论】:

  • Perl 的 system 函数不能很好地处理数组引用参数(除非你的路径中有一个名为 ARRAY(0xa63af0) 的程序)。
  • 嗯...这仍然是我想要的。我不确定是什么让人们认为这就是系统的工作方式。谢谢,我会编辑我的问题。

标签: arrays perl scalar


【解决方案1】:

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

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
}

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 2014-12-19
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多