perl 子程序参数传递的问题

发布时间:2020-04-19编辑:脚本学堂
向perl的一个子程序传递多个参数时,如果在子程序中定义的第一个接收参数是以数组参数接收时,它会将传递进来的所有参数放到子程序中定义的第一个数组接收参数。

向perl的一个子程序传递多个参数时,如果在子程序中定义的第一个接收参数是以数组参数接收时,它会将传递进来的所有参数放到子程序中定义的第一个数组接收参数。
如下所示:
 

复制代码 代码如下:
sub argument{
   my (@filename,$filetimes)=@_;
   print "$filetime : $filetimen";
   print "@filenames : $_n" for (@filenames);
}

现在传递两个参数为:
 

复制代码 代码如下:
$filename=file4;
@filenames=(file1,file2,file3);

调用子程序:
 

复制代码 代码如下:
&argument(@filenames,$filename);

输出结果为:
$filetime :
@filenames : file1
@filenames : file2
@filenames : file3

相反,如果将子程序中的形参改为如下所示,就会正常显示:
 

复制代码 代码如下:
sub argument{
   my ($filetimes,@filename)=@_;
   print "$filetime : $filetimen";
   print "@filenames : $_n" for (@filenames);
}

同样以上面的实参调用子程序,输出结果如下:
$filetime : file4
@filenames : file1
@filenames : file2
@filenames : file3