2017-06-15 18 views
0

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

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

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

是确定的,如果我调用的函数没有这样完整的参数?

&my_function($param1); 
+3

当你尝试过什么事?这取决于'#do something here'。 – toolic

+0

哦,我看到了,在这种情况下,我会检查$ param2 ,例如 if($ param2 == 1)like –

+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); 
+0

如果我只是检查$ y是undef或不是会是好吗? –

+0

@FerryGideon是......'if(defined $ param2){...' – stevieb

+0

既然'$ param2'是布尔值,'if($ param2)'比'if(defined $ param2)'更合适,正如我前面提到的。 – ikegami

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); 
+0

所以它更好地定义param2的权利?哦,对不起,在我的情况下,我忽略了原型,我忘了它。 :D –

+1

Re“*所以它更好地定义param2的权利?*”,这是远不及我所说的。 – ikegami

相关问题