2013-12-20 248 views
1

我在Perl新手,我在另一页我打电话的是页面定义的函数函数调用如果第二个参数为空,第三个参数为第二个参数?

sub ex_arg($_) 
{ 
    print "$_[0]\n"; 
    print "$_[1]\n"; 
    print "$_[2]\n"; 
} 
1; 

require "ex_arg.pl"; 
ex_arg(1,2,3); 
ex_arg(1,,3); #in the second function i want the second parameter to be null 
1; 

是否可以这样做。我没有得到第二个参数,而是第三个参数作为第二个参数。

我做错了什么。请纠正我。

在此先感谢。

回答

8

问题是,在将参数列表传递给子例程之前,您的参数列表不会为第二个参数保留一个空值。列表1,,3将扩展到与1,3相同的列表。

您需要传递一些实际存在的值,例如undef或空字符串。

ex_arg(1, undef, 3); 

那么也许像

sub ex_arg { 
    my ($arg1, $arg2, $arg3) = @_; 
    if (! defined($arg2)) {   # checking if arg2 is empty 
     # do something 
    } 
} 

在一个相关的说明,您应该不会,除非你知道它的使用在你的子程序中声明原型。它们用于在子例程中创建特定的行为,并且与其他语言的工作方式无关,就子例程中的变量而言。

sub foo (...) { 
     #^^^^^^^----- prototypes 

sub foo {  # this is the standard way to declare 
+0

非常感谢您的信息。 –

+0

不客气。 – TLP

5

试试这个,

ex_arg(1, undef, 3); 

ex_arg(1, , 3) Perl的是同样的事情ex_arg(1, 3)

​​

旁注;如果你不想使用prototypes那么sub ex_arg {..}就是你想要的。

优选my ($x,$y) = @_;优于$_[0]$_[1]

相关问题