博主


« 2018年-05月 »
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2

分类


热门标签


最新评论


最近留言


最近访客


概要

  • 文章数量: 41
  • 分类数量: 9
  • 标签数量: 73
  • 评论数量: 159
  • 浏览次数: 3475514

友情链接

Perl子程序参数是数组或哈希表时的问题

作者: 我不是鱼 (2008-11-06 23:18)分类: Perl   标签: 引用 子程序

Perl子程序参数是数组或哈希表时,函数中获得这些参数值的方式和一般的标量变量是不同的。

Perl代码
  1. #!/usr/bin/perl   
  2. use strict;   
  3. use warnings;   
  4.   
  5. sub func{   
  6.     print "@_\n";   
  7. }   
  8.   
  9. my $id = 1;   
  10. my @info = ('PHPfans''phpfans.net');   
  11. my %info = ("name"=>"PHPfans""url"=>"phpfans.net");   
  12.   
  13. func($id@info);  

[root@PHPfans perl]# perl sub.pl
1 PHPfans phpfans.net

发现第一个参数和第二个参数合并成一个大数组了。如果是哈希表的话还会将键值也保存在 @_ 数组中。问题是怎么将各个参数分出来。这里第一个是标量变量,还可以用 shift 获取,然后剩下的就是第二个参数。但如果两个都是数组变量的话,这种方法显然就不行。这就要用到引用的方式传递。引用和C的指针是一致的,就是某值的地址。Perl的引用和PHP又不太相同,Perl是用反斜线(\)操作符

Perl代码
  1. #!/usr/bin/perl   
  2. use strict;   
  3. use warnings;   
  4.   
  5. sub func{   
  6.     print "@_\n";   
  7. }   
  8.   
  9. my $id = 1;   
  10. my @info = ('PHPfans''phpfans.net');   
  11. my %info = ("name"=>"PHPfans""url"=>"phpfans.net");   
  12.   
  13. func($id, \@info);  

[root@PHPfans perl]# perl sub.pl
1 ARRAY(0x81f0e24)

现在是要从该引用得倒改数组的值。如果$pointer的值为一个数组的指针,则通过形式@$pointer来访问数组中的元素。类似的,哈希表为 %$pointer。

Perl代码
  1. #!/usr/bin/perl   
  2. use strict;   
  3. use warnings;   
  4.   
  5. sub func{   
  6.     my ($id$info) = @_;   
  7.     my @info = @$info;   
  8.     print "@info\n";   
  9. }   
  10.   
  11. my $id = 1;   
  12. my @info = ('PHPfans''phpfans.net');   
  13. my %info = ("name"=>"PHPfans""url"=>"phpfans.net");   
  14.   
  15. func($id, \@info);  

[root@PHPfans perl]# perl sub.pl
PHPfans phpfans.net

评论 (0) | 浏览 (6683)

前一篇: Apache  的 Include  指令
后一篇: Linux下的下载工具 d4x


添加评论

登陆 注册  昵称: