如果perl中的函数在没有完整参数的情况下调用,可以吗?

时间:2017-06-15 16:54:39

标签: perl

我在perl中有一些函数,

sub my_function{
    my ($param1, $param2) = @_;
    #do something here

    if($param1==1){
       #do 1
    }
    if($param2==1){
       #do 2
    }
}

如果我在没有完整参数的情况下调用函数,这样可以吗?

&my_function($param1);

2 个答案:

答案 0 :(得分:3)

$param2最终会成为undef。如果那很好,那么是的,没关系。

但是,在你提出的情况下,它并不好。如果您没有为my_function提供值,则所写的$param2会发出警告。删除检查的平等性,你首先应该没有(如下所示)解决了这个问题。

sub my_function {
    my ($param1, $param2) = @_;

    if ($param1) {
       #do 1
    }

    if ($param2){
       #do 2
    }
}

最后,为什么在没有原型时告诉Perl忽略my_function的原型(使用&)?摆脱它!

my_function($param1);

答案 1 :(得分:3)

如果只传递一个参数@_,则只包含一个值。因此$param2将被赋予未定义的值。是否可以,取决于功能正在做什么。

下面的测试显示了一个参数,123(undef)

sub test {
    my ($x, $y) = @_;
    printf("number of args: %d\n", int @_);
    printf("x: %s\n", $x // "(undef)");
    printf("y: %s\n", $y // "(undef)");
}
test(123);