Perl子程序參數問題解答
本文和大家重點討論一下Perl子程序參數的用法,Perl子程序參數是數組或哈希表時,函數中獲得這些參數值的方式和一般的標量變量是不同的。
Perl子程序參數是數組或哈希表時的問題
Perl子程序參數是數組或哈希表時,函數中獲得這些參數值的方式和一般的標量變量是不同的。
Perl代碼
- #!/usr/bin/perl
- usestrict;
- usewarnings;
- subfunc{
- print"@_\n";
- }
- my$id=1;
- my@info=('PHPfans','phpfans.net');
- my%info=("name"=>"PHPfans","url"=>"phpfans.net");
- func($id,@info);
- [root@PHPfansperl]#perlsub.pl
- 1PHPfansphpfans.net
發現第一個參數和第二個參數合并成一個大數組了。Perl子程序參數如果是哈希表的話還會將鍵值也保存在@_數組中。問題是怎么將各個參數分出來。這里第一個是標量變量,還可以用shift獲取,然后剩下的就是第二個參數。但如果兩個都是數組變量的話,這種方法顯然就不行。這就要用到引用的方式傳遞。引用和C的指針是一致的,就是某值的地址。Perl的引用和PHP又不太相同,Perl是用反斜線(\)操作符
Perl代碼
- #!/usr/bin/perl
- usestrict;
- usewarnings;
- subfunc{
- print"@_\n";
- }
- my$id=1;
- my@info=('PHPfans','phpfans.net');
- my%info=("name"=>"PHPfans","url"=>"phpfans.net");
- func($id,\@info);
- [root@PHPfansperl]#perlsub.pl
- 1ARRAY(0x81f0e24)
現在是要從該引用得倒改數組的值。如果$pointer的值為一個數組的指針,則通過形式@$pointer來訪問數組中的元素。類似的,哈希表為%$pointer。
Perl代碼
- #!/usr/bin/perl
- usestrict;
- usewarnings;
- subfunc{
- 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@PHPfansperl]#perlsub.pl
- PHPfansphpfans.net
【編輯推薦】