溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Perl引用中直接引用的用法

發布時間:2021-07-21 23:39:50 來源:億速云 閱讀:319 作者:chen 欄目:開發技術

本篇內容介紹了“Perl引用中直接引用的用法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!


Perl直接引用

Perl中的Perl引用分為直接引用和符號Perl引用,本文只針對直接Perl引用,至于符號Perl引用在以后的文章中會給出解釋。

1、一般的標量Perl引用。如:

subadd{  my($a,$b)=@_;  $$a++;  $$b++;  }  $a=1;  $b=2;  add(\$a,\$b);  print"$a,$b\n";

輸出:2,3。
說明:取變量的Perl引用可以用“\”符號。解Perl引用用“$”符號。

2、數組的Perl引用

數組的Perl引用和標量的Perl引用一樣,在數組名前面加“\”,只是在解Perl引用的時候,使用@符號。如:
@abc=(1,2,3);
$ref=\@abc;
print“@$ref\n”;輸出1,2,3。
print“@$ref[0]\n”;輸出1。
對數組的Perl引用主要用在解決向函數傳遞若干個數組的問題。在Perl中,如果向函數傳遞若干個數組,則他們會將這些數組展開到@_數組中,并不能通過@_這個數組來區分傳遞過來的參數。
如:

subadd{  my(@ref1,@ref2)=@_;  print(“ref1:@ref1\n”);  print(“ref2:@ref2\n”);  }   @a=(1,2,3);  @b=(1,2,3);  @ret=add(@a,@b);

實際輸出的是:ref1:123123
ref2:
可以看到,在子函數add中,并沒有區分傳遞過來的兩個參數。那么如何向函數傳遞多個數組或哈希表呢?
解決的辦法是使用數組Perl引用。如下這個例子說明了如何實現:

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、對哈希表的Perl引用

和數組類似,但是當解Perl引用時要使用$符號,如:
%hash=(abc=>123,def=>456);
$ref=\%hash;
print"%$ref\n";輸出:%HASH(0x83179b4)
print"$$ref{abc}\n";輸出:123

4、表的Perl引用

創建表的Perl引用將會把表中的***一個值作為產生的標量:
$reflist=\($a,$b,$c);
print$$reflist."\n";#輸出$c的值。
$reflist=\(1,2...30,40);
print$$reflist."\n"#輸出40

5、創建匿名數組的Perl引用

$arrayreference=[1,2,3];
print$$arrayreference[0];#輸出1
print$arrayreference->[0];#輸出1可以用箭頭解Perl引用

◆當用pop從數組中取值時,數組的***個元素會被彈出,但是如果用pop用于匿名數組時,可以實現取值而不影響原有數組,如:
@a=(1,2,3);
$s=pop@{[@a]};#perl作為快來計算@{},而快在計算時將創建對匿名數組的Perl引用。
print“@a\n”;#輸出123

◆當反Perl引用數組Perl引用時,該結果將插入到字符串中,如:想實現輸出uc函數的返回結果:
print"uc(abc)\n";#輸出uc(abc),并不能將abc轉換成大寫
print"@{[uc(abc)]}\n"#輸出ABC,通過數組Perl引用實現大寫轉換。
可以通過$#$的方式取匿名數組的長度:
$a=[1,2,3,4];
print"$#$a\n";#輸出3,(***一個元素的下標)

6、創建匿名哈希表的Perl引用

如:
$hashreference={Name=>Sylvster,Gender=>male};
print$hashreference->{"Name"};#輸出Sylvester,等價于:$$hashreference{Name};
如果需要用each遍歷哈希表,則:
while(($key,$value)=each(%$hashreference)){}

7、用匿名哈希表模仿用戶自定義數據類型

subPoint{  ($x,$y)=@_;  return{  x=>$x,  y=>$y  };  }

當使用Point類型時,可以這樣做:
$point=Point(10,20);
print"x:$point->{x},y:$point->{y}\n";

8、在perl中創建***范圍閉包

例如:

subPoint{  my$string1=shift;  returnsub{  my$string2=shift;  print("$string1,$string2\n");  };  }  $point=Point("Hello");  &$point("World");  &$point("guys");

Point函數返回一個對匿名子函數的Perl引用,變量string1被***的保存在了函數中,每次調用&$point,string1的值沒有改變,都是“Hello”。

“Perl引用中直接引用的用法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女