Perl子程序参数是数组或哈希表时,函数中获得这些参数值的方式和一般的标量变量是不同的。
Perl代码
- #!/usr/bin/perl
- use strict;
- use warnings;
- sub func{
- print "@_\n";
- }
- my $id = 1;
- my @info = ('PHPfans', 'phpfans.net');
- my %info = ("name"=>"PHPfans", "url"=>"phpfans.net");
- func($id, @info);
[root@PHPfans perl]# perl sub.pl
1 PHPfans phpfans.net
发现第一个参数和第二个参数合并成一个大数组了。如果是哈希表的话还会将键值也保存在 @_ 数组中。问题是怎么将各个参数分出来。这里第一个是标量变量,还可以用 shift 获取,然后剩下的就是第二个参数。但如果两个都是数组变量的话,这种方法显然就不行。这就要用到引用的方式传递。引用和C的指针是一致的,就是某值的地址。Perl的引用和PHP又不太相同,Perl是用反斜线(\)操作符
Perl代码
- #!/usr/bin/perl
- use strict;
- use warnings;
- sub func{
- print "@_\n";
- }
- my $id = 1;
- my @info = ('PHPfans', 'phpfans.net');
- my %info = ("name"=>"PHPfans", "url"=>"phpfans.net");
- func($id, \@info);
[root@PHPfans perl]# perl sub.pl
1 ARRAY(0x81f0e24)
现在是要从该引用得倒改数组的值。如果$pointer的值为一个数组的指针,则通过形式@$pointer来访问数组中的元素。类似的,哈希表为 %$pointer。
Perl代码
- #!/usr/bin/perl
- use strict;
- use warnings;
- sub func{
- my ($id, $info) = @_;
- my @info = @$info;
- print "@info\n";
- }
- my $id = 1;
- my @info = ('PHPfans', 'phpfans.net');
- my %info = ("name"=>"PHPfans", "url"=>"phpfans.net");
- func($id, \@info);
[root@PHPfans perl]# perl sub.pl
PHPfans phpfans.net