我在perl中有一些函数,
sub my_function{
my ($param1, $param2) = @_;
#do something here
if($param1==1){
#do 1
}
if($param2==1){
#do 2
}
}
如果我在没有完整参数的情况下调用函数,这样可以吗?
&my_function($param1);
答案 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);