標籤:
一、引用簡介
引用就是指標,可以指向變數、數組、雜湊表甚至是子程式。
二、使用引用
如果$pointer的值為一個數組的指標,則通過形式@$pointer來訪問數組中的元素。形式@$pointer的意義為“取出$pointer中的地址值當作數組使用”。類似的,%$pointer為指向雜湊表中第一個元素的引用。
三、使用反斜線(\)操作符
反斜線操作符與C語言中傳遞地址的操作符&功能類似。一般是用\建立變數又一個新的引用。下面為建立簡單變數的引用的例子:
$variavle = 22;
$pointer = \$variable;
$ice = "jello";
$iceprt = \$ice;
引用$pointer指向存有$variable值的位置,引用$iceptr指向"jello"。
四、引用和數組
關於Perl語言應該記住的最重要的一點可能是:Perl中的數組和雜湊表始終是一維的。因此,數組和雜湊表只儲存標量值,不直接存貯數組或其它的複雜資料結構。數組的成員要麼是數(或字串)要麼是引用。
對數組和雜湊表可以象對簡單變數一樣使用反斜線操作符,數組的引用如下:
1 #!/usr/bin/perl
2 #
3 # Using Array references
4 #
5 $pointer = \@ARGV;
6 printf "\n Pointer Address of ARGV = $pointer\n";
7 $i = scalar(@$pointer);
8 printf "\n Number of arguments : $i \n";
9 $i = 0;
10 foreach (@$pointer) {
11 printf "$i : $$pointer[$i++]; \n";
12 }
運行結果如下:
$ test 1 2 3 4
Pointer Address of ARGV = ARRAY(0x806c378)
Number of arguments : 4
0 : 1;
1 : 2;
2 : 3;
3 : 4;
第11行用形式$$pointer[$i]列出所有元素
通過引用訪問雜湊表的元素形式為$$pointer{$index}
五、多維陣列
六、子程式引用
perl中子程式的引用與C中函數的指標類似,構造方法如下:
$pointer_to_sub = sub {... declaration of sub ...};
通過所構造的引用調用子程式的方法為:
&$pointer_to_sub(parameters);
七、數組與子程式
#!/usr/bin/perl
@names = (mickey, goofy, daffy );
@phones = (5551234, 5554321, 666 );
$i = 0;
sub listem {
my ($a,$b) = @_;
foreach (@$a) {
print "a[$i] = " . @$a[$i] . " " . "\tb[$i] = " . @$b[$i] ."\n";
$i++;
}
}
&listem(\@names, \@phones);
結果輸出如下:
a[0] = mickey b[0] = 5551234a[1] = goofy b[1] = 5554321a[2] = daffy b[2] = 666
PS
1. 當想傳遞給子程式的參數是多於一個的數組時,一定要使用引用;
2. 一定不要在子程式中使用形如(@variable) = @_;的語句處理參數,除非你想要把所有參數集中到一個長的數組中。
八、檔案控制代碼的引用
有時,必須將同一資訊輸出到不同的檔案,例如,某程式可能在一個執行個體中輸出到螢幕,另一個輸出到印表機,再一個輸出到記錄檔案,甚至同時輸出到這三個檔案。相比較於每種處理寫一個單獨的語句,可以有更好的實現方式如下:
spitOut(\*STDIN);
spitOut(\*LPHANDLE);
spitOut(\*LOGHANDLE);
其中子程式spitOut的代碼如下:
sub spitOut {
my $fh = shift;
print $fh "Gee Wilbur, I like this lettuce\n";
}
注意其中檔案控制代碼引用的文法為\*FILEHANDLE。
Perl5中的引用和指標