Perl直接l引用用法解析
本文和大家重點(diǎn)討論一下Perl直接Perl引用,PerlPerl引用分為直接引用和符號(hào)引用,每種Perl引用都有各自的特點(diǎn)和作用,這里向大家簡(jiǎn)單介紹一下Perl直接應(yīng)用的概念,希望對(duì)大家學(xué)習(xí)有所幫助。
Perl直接l引用
Perl中的Perl引用分為直接引用和符號(hào)引用,本文只針對(duì)直接Perl引用,至于符號(hào)Perl引用在以后的文章中會(huì)給出解釋。
1、一般的標(biāo)量Perl引用,如:
- subadd{
- my($a,$b)=@_;
- $$a++;
- $$b++;
- }
- $a=1;
- $b=2;
- add(\$a,\$b);
- print"$a,$b\n";
輸出:2,3。
說(shuō)明:取變量的Perl引用可以用“\”符號(hào)。解Perl引用用“$”符號(hào)。
2、數(shù)組的Perl引用
數(shù)組的Perl引用和標(biāo)量的Perl引用一樣,在數(shù)組名前面加“\”,只是在解Perl引用的時(shí)候,使用@符號(hào)。如:
@abc=(1,2,3);
$ref=\@abc;
print“@$ref\n”;輸出1,2,3。
print“@$ref[0]\n”;輸出1。
對(duì)數(shù)組的Perl引用主要用在解決向函數(shù)傳遞若干個(gè)數(shù)組的問(wèn)題。在Perl中,如果向函數(shù)傳遞若干個(gè)數(shù)組,則他們會(huì)將這些數(shù)組展開(kāi)到@_數(shù)組中,并不能通過(guò)@_這個(gè)數(shù)組來(lái)區(qū)分傳遞過(guò)來(lái)的參數(shù)。
如:
- subadd{
- my(@ref1,@ref2)=@_;
- print(“ref1:@ref1\n”);
- print(“ref2:@ref2\n”);
- }
- @a=(1,2,3);
- @b=(1,2,3);
- @ret=add(@a,@b);
實(shí)際輸出的是:ref1:123123
ref2:
可以看到,在子函數(shù)add中,并沒(méi)有區(qū)分傳遞過(guò)來(lái)的兩個(gè)參數(shù)。那么如何向函數(shù)傳遞多個(gè)數(shù)組或哈希表呢?
解決的辦法是使用數(shù)組Perl引用。如下這個(gè)例子說(shuō)明了如何實(shí)現(xiàn):
- subadd{
- my@result;
- my($ref1,$ref2)=@_;
- while(@$ref1&&@$ref2){
- unshift@result,pop(@{$ref1})+pop(@{$ref2});
- }
- return@result;
- }
- @a=(1,2,3);
- @b=(1,2,3);
- @ret=add(\@a,\@b);
- print"@ret\n";
輸出:246
3、對(duì)哈希表的Perl引用
和數(shù)組類似,但是當(dāng)解Perl引用時(shí)要使用$符號(hào),如:
%hash=(abc=>123,def=>456);
$ref=\%hash;
print"%$ref\n";輸出:%HASH(0x83179b4)
print"$$ref{abc}\n";輸出:123
4、表的Perl引用
創(chuàng)建表的Perl引用將會(huì)把表中的***一個(gè)值作為產(chǎn)生的標(biāo)量:
$reflist=\($a,$b,$c);
print$$reflist."\n";#輸出$c的值。
$reflist=\(1,2...30,40);
print$$reflist."\n"#輸出40
5、創(chuàng)建匿名數(shù)組的Perl引用
- $arrayreference=[1,2,3];
- print$$arrayreference[0];#輸出1
- print$arrayreference->[0];#輸出1可以用箭頭解Perl引用
當(dāng)用pop從數(shù)組中取值時(shí),數(shù)組的***個(gè)元素會(huì)被彈出,但是如果用pop用于匿名數(shù)組時(shí),可以實(shí)現(xiàn)取值而不影響原有數(shù)組,如:
@a=(1,2,3);
$s=pop@{[@a]};#perl作為快來(lái)計(jì)算@{},而快在計(jì)算時(shí)將創(chuàng)建對(duì)匿名數(shù)組的Perl引用。
print“@a\n”;#輸出123
當(dāng)反Perl引用數(shù)組Perl引用時(shí),該結(jié)果將插入到字符串中,如:想實(shí)現(xiàn)輸出uc函數(shù)的返回結(jié)果:
print"uc(abc)\n";#輸出uc(abc),并不能將abc轉(zhuǎn)換成大寫(xiě)
print"@{[uc(abc)]}\n"#輸出ABC,通過(guò)數(shù)組Perl引用實(shí)現(xiàn)大寫(xiě)轉(zhuǎn)換。
可以通過(guò)$#$的方式取匿名數(shù)組的長(zhǎng)度:
$a=[1,2,3,4];
print"$#$a\n";#輸出3,(***一個(gè)元素的下標(biāo))
6、創(chuàng)建匿名哈希表的Perl引用
如:
$hashreference={Name=>Sylvster,Gender=>male};
print$hashreference->{"Name"};#輸出Sylvester,等價(jià)于:$$hashreference{Name};
如果需要用each遍歷哈希表,則:
while(($key,$value)=each(%$hashreference)){}
7、用匿名哈希表模仿用戶自定義數(shù)據(jù)類型
subPoint{
($x,$y)=@_;
return{
x=>$x,
y=>$y
};
}
當(dāng)使用Point類型時(shí),可以這樣做:
$point=Point(10,20);
print"x:$point->{x},y:$point->{y}\n";
8、在perl中創(chuàng)建***范圍閉包
例如:
- subPoint{
- my$string1=shift;
- returnsub{
- my$string2=shift;
- print("$string1,$string2\n");
- };
- }
- $point=Point("Hello");
- &$point("World");
- &$point("guys");
Point函數(shù)返回一個(gè)對(duì)匿名子函數(shù)的Perl引用,變量string1被***的保存在了函數(shù)中,每次調(diào)用&$point,string1的值沒(méi)有改變,都是“Hello”。
【編輯推薦】
- 經(jīng)驗(yàn)總結(jié) Perl的安裝配置步驟
- Perl foreach控制結(jié)構(gòu)中的控制變量
- Perl面向?qū)ο缶幊讨蟹椒ǖ恼{(diào)用
- 揭秘Perl變量中Perl純變量用法
- Perl基礎(chǔ) Perl復(fù)雜數(shù)據(jù)結(jié)構(gòu)