亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 第十二章 perl5中的引用(指針).htm

?? perl5教程
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
<a name="5">五、多維數組</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;語句@array = list;可以創建數組的引用,中括號可以創建匿名數組的引用。下面語句為用于畫圖的三維數組的例子:<br>
&nbsp;&nbsp;&nbsp;&nbsp;$line = ['solid' , 'black' , ['1','2','3'] , ['4','5','6']];<br>
&nbsp;&nbsp;&nbsp;&nbsp;此語句建立了一個含四個元素的三維數組,變量$line指向該數組。前兩個元素是標量,存貯線條的類型和顏色,后兩個元素是匿名數組的引用,存貯線條的起點和終點。訪問其元素語法如下:<br>
<blockquote>
$arrayReference->[$index] &nbsp; &nbsp; single-dimensional array  <br>
$arrayReference->[$index1][$index2] &nbsp; two-dimensional array <br>
$arrayReference->[$index1][$index2][$index3]  three-dimensional array 
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;可以創建在你的智力、設計經驗和計算機的內存允許的情況下極盡復雜的結構,但最好對可能讀到或管理你的代碼的人友好一些--盡量使代碼簡單些。另一方面,如果你想向別人炫耀你的編程能力,Perl給你足夠的機會和能力編寫連自己都難免糊涂的代碼。:)<br>
&nbsp;&nbsp;&nbsp;&nbsp;建議:當你想使用多于三維的數組時,最好考慮使用其它數據結構來簡化代碼。<br>
&nbsp;&nbsp;&nbsp;&nbsp;下面為創建和使用二維數組的例子:<br>
<blockquote>
1&nbsp;   #!/usr/bin/perl<br>
2&nbsp;   #<br>
3&nbsp;   # Using Multi-dimensional Array references<br>
4&nbsp;   #<br>
5&nbsp;   $line = ['solid', 'black', ['1','2','3'] , ['4', '5', '6']];<br>
6&nbsp;   print "\$line->[0] = $line->[0] \n";<br>
7&nbsp;   print "\$line->[1] = $line->[1] \n";<br>
8&nbsp;   print "\$line->[2][0] = $line->[2][0] \n";<br>
9&nbsp;   print "\$line->[2][1] = $line->[2][1] \n";<br>
10  print "\$line->[2][2] = $line->[2][2] \n";<br>
11  print "\$line->[3][0] = $line->[3][0] \n";<br>
12  print "\$line->[3][1] = $line->[3][1] \n";<br>
13  print "\$line->[3][2] = $line->[3][2] \n";<br>
14  print "\n"; # The obligatory output beautifier.
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;結果輸出如下:<br>
<blockquote>
$line->[0] = solid<br>
$line->[1] = black<br>
$line->[2][0] = 1<br>
$line->[2][1] = 2<br>
$line->[2][2] = 3<br>
$line->[3][0] = 4<br>
$line->[3][1] = 5<br>
$line->[3][2] = 6
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;那么三維數組又如何呢?下面是上例略為改動的版本。<br>
<blockquote>
1&nbsp;   #!/usr/bin/perl<br>
2&nbsp;   #<br>
3&nbsp;   # Using Multi-dimensional Array references again<br>
4&nbsp;   #<br>
5&nbsp;   $line = ['solid', 'black', ['1','2','3', ['4', '5', '6']]];<br>
6&nbsp;   print "\$line->[0] = $line->[0] \n";<br>
7&nbsp;   print "\$line->[1] = $line->[1] \n";<br>
8&nbsp;   print "\$line->[2][0] = $line->[2][0] \n";<br>
9&nbsp;   print "\$line->[2][1] = $line->[2][1] \n";<br>
10  print "\$line->[2][2] = $line->[2][2] \n";<br>
11  print "\$line->[2][3][0] = $line->[2][3][0] \n";<br>
12  print "\$line->[2][3][1] = $line->[2][3][1] \n";<br>
13  print "\$line->[2][3][2] = $line->[2][3][2] \n";<br>
14  print "\n";
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;結果輸出如下:<br>
<blockquote>
$line->[0] = solid <br>
$line->[1] = black <br>
$line->[2][0] = 1 <br>
$line->[2][1] = 2 <br>
$line->[2][2] = 3 <br>
$line->[2][3][0] = 4 <br>
$line->[2][3][1] = 5 <br>
$line->[2][3][2] = 6
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;訪問第三層元素的方式形如$line->[2][3][0],類似于C語言中的Array_pointer[2][3][0]。本例中,下標均為數字,當然亦可用變量代替。用這種方法可以把數組和哈希表結合起來構成復雜的結構,如下:<br>
<blockquote>
1  #!/usr/bin/perl<br>
2  #<br>
3  # Using Multi-dimensional Array and Hash references<br>
4  #<br>
5  %cube = (<br>
6     '0', ['0', '0', '0'],<br>
7     '1', ['0', '0', '1'],<br>
8     '2', ['0', '1', '0'],<br>
9     '3', ['0', '1', '1'],<br>
10    '4', ['1', '0', '0'],<br>
11    '5', ['1', '0', '1'],<br>
12    '6', ['1', '1', '0'],<br>
13    '7', ['1', '1', '1']<br>
14    );<br>
15 $pointer = \%cube;<br>
16 print "\n Da Cube \n";<br>
17 foreach $i (sort keys %$pointer) {<br>
18    $list = $$pointer{$i};<br>
19    $x = $list->[0];<br>
20    $y = $list->[1];<br>
21    $z = $list->[2];<br>
22    printf " Point $i =  $x,$y,$z \n";<br>
23 }
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;結果輸出如下:<br>
<blockquote> 
 Da Cube <br>
 Point 0 =  0,0,0 <br>
 Point 1 =  0,0,1 <br>
 Point 2 =  0,1,0 <br>
 Point 3 =  0,1,1 <br>
 Point 4 =  1,0,0 <br>
 Point 5 =  1,0,1 <br>
 Point 6 =  1,1,0 <br>
 Point 7 =  1,1,1 
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;這是一個定義立方體的例子。%cube中保存的是點號和坐標,坐標是個含三個數字的數組。變量$list獲取坐標數組的引用:$list = $$ pointer{$i}; 然后訪問各坐標值:$x = $list->[0]; ... 也可用如下方法給$x、$y和$z賦值:($x,$y,$z) = @$list;<br>
&nbsp;&nbsp;&nbsp;&nbsp;使用哈希表和數組時,用$和用->是類似的,對數組而言下面兩個語句等效:<br>
&nbsp;&nbsp;&nbsp;&nbsp;$$names[0] = "kamran";<br>
&nbsp;&nbsp;&nbsp;&nbsp;$names->[0] = "kamran";<br>
&nbsp;&nbsp;&nbsp;&nbsp;對哈希表而言下面兩個語句等效:<br>
&nbsp;&nbsp;&nbsp;&nbsp;$$lastnames{"kamran"} = "Husain";<br>
&nbsp;&nbsp;&nbsp;&nbsp;$lastnames->{"kamran"} = "Husain";<br>
&nbsp;&nbsp;&nbsp;&nbsp;Perl中的數組可以在運行中創建和擴展。當數組的引用第一次在等式左邊出現時,該數組自動被創建,簡單變量和多維數組也是一樣。如下句,如果數組contours不存在,則被創建:<br>
&nbsp;&nbsp;&nbsp;&nbsp;$contours[$x][$y][$z] = &xlate($mouseX, $mouseY);<br>
<a name="6">六、子程序的引用</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;perl中子程序的引用與C中函數的指針類似,構造方法如下:<br>
&nbsp;&nbsp;&nbsp;&nbsp;$pointer_to_sub = sub {... declaration of sub ...};<br>
&nbsp;&nbsp;&nbsp;&nbsp;通過所構造的引用調用子程序的方法為:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&$pointer_to_sub(parameters);<br>
<a name="6.1"><li>子程序模板</li></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;子程序的返回值不僅限于數據,還可以返回子程序的引用。返回的子程序在調用處執行,但卻是在最初被創建的調用處被設置,這是由Perl對Closure處理的方式決定的。Closure意即如果你定義了一個函數,它就以最初定義的內容運行。(Closure詳見OOP的參考書)下面的例子中,設置了多個錯誤信息顯示子程序,這樣的子程序定義方法可用于創建模板。<br>
<blockquote>
#!/usr/bin/perl<br>
sub errorMsg {<br>
 &nbsp; my $lvl = shift;<br>
 &nbsp; #<br>
 &nbsp; # define the subroutine to run when called.<br>
 &nbsp; #<br>
 &nbsp; return sub {<br>
 &nbsp; &nbsp; my $msg = shift;  # Define the error type now.<br>
 &nbsp; &nbsp; print "Err Level $lvl:$msg\n"; }; # print later.  <br>       
 &nbsp; }<br>
$severe  = errorMsg("Severe");<br>
$fatal = errorMsg("Fatal");<br>
$annoy = errorMsg("Annoying");<br>
<br>
&$severe("Divide by zero");<br>
&$fatal("Did you forget to use a semi-colon?");<br>
&$annoy("Uninitialized variable in use");
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;結果輸出如下:<br>
<blockquote>
Err Level Severe:Divide by zero<br>
Err Level Fatal:Did you forget to use a semi-colon?<br>
Err Level Annoying:Uninitialized variable in use
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;上例中,子程序errorMsg使用了局域變量$lvl,用于返回給調用者。當errorMsg被調用時,$lvl的值設置到返回的子程序內容中,雖然是用的my函數。三次調用設置了三個不同的$lvl變量值。當errorMsg返回時,$lvl的值保存到每次被聲明時所產生的子程序代碼中。最后三句對產生的子程序引用進行調用時$msg的值被替換,但$lvl的值仍是相應子程序代碼創建時的值。<br>
&nbsp;&nbsp;&nbsp;&nbsp;很混淆是嗎?是的,所以這樣的代碼在Perl程序中很少見。<br>
<a name="7">七、數組與子程序</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;數組利于管理相關數據,本節討論如何向子程序傳遞多個數組。前面我們講過用@_傳遞子程序的參數,但是@_是一個單維數組,不管你傳遞的參數是多少個數組,都按序存貯在@_中,故用形如my(@a,@b)=@_; 的語句來獲取參數值時,全部值都賦給了@a,而@b為空。那么怎么把一個以上的數組傳遞給子程序呢?方法是用引用。見下例:<br>
<blockquote>
#!/usr/bin/perl<br>
@names = (mickey, goofy, daffy );<br>
@phones = (5551234, 5554321, 666 );<br>
$i = 0;<br>
sub listem {<br>
 &nbsp;   my ($a,$b) = @_;<br>
 &nbsp;   foreach (@$a) {<br>
 &nbsp; &nbsp;  print "a[$i] = " . @$a[$i] . " " . "\tb[$i] = " . @$b[$i] ."\n";<br>
 &nbsp; &nbsp;  $i++;<br>
 &nbsp;   }<br>
}<br>
&listem(\@names, \@phones);
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;結果輸出如下:<br>
<blockquote><pre>
a[0] = mickey     b[0] = 5551234
a[1] = goofy      b[1] = 5554321
a[2] = daffy      b[2] = 666
</pre></blockquote>
注意:<blockquote>1、當想傳遞給子程序的參數是多于一個的數組時一定要使用引用。<br>
2、一定不要在子程序中使用形如 (@variable)=@_; 的語句處理參數,除非你想把所有參數集中到一個長的數組中。</blockquote>
<a name="8">八、文件句柄的引用</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;有時,必須將同一信息輸出到不同的文件,例如,某程序可能在一個實例中輸出到屏幕,另一個輸出到打印機,再一個輸出到記錄文件,甚至同時輸出到這三個文件。相比較于每種處理寫一個單獨的語句,可以有更好的實現方式如下:<br>
&nbsp;&nbsp;&nbsp;&nbsp;spitOut(\*STDIN);<br>
&nbsp;&nbsp;&nbsp;&nbsp;spitOut(\*LPHANDLE);<br>
&nbsp;&nbsp;&nbsp;&nbsp;spitOut(\*LOGHANDLE);<br>
&nbsp;&nbsp;&nbsp;&nbsp;其中子程序spitOut的代碼如下:<br>
<blockquote>
sub spitOut {<br>
 &nbsp;   my $fh = shift;<br>
 &nbsp;   print $fh "Gee Wilbur, I like this lettuce\n";<br>
}
</blockquote>
&nbsp;&nbsp;&nbsp;&nbsp;注意其中文件句柄引用的語法為\*FILEHANDLE。<br>


<p align="center"><a href="第十一章 文件系統.htm">上一章</a> <a href="第十三章 Perl的面向對象編程.htm">下一章</a> <a href="index.htm">目錄</a></p>
<br>
</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日骚欧美日韩| 手机精品视频在线观看| 精品999在线播放| 日韩欧美国产1| 91精品一区二区三区久久久久久| 在线精品亚洲一区二区不卡| 91高清视频在线| 欧美日韩亚洲综合| 777a∨成人精品桃花网| 日韩亚洲欧美成人一区| 精品国产一区二区三区久久影院| 日韩欧美黄色影院| 久久日一线二线三线suv| 国产亚洲精品bt天堂精选| 久久久精品天堂| 亚洲丝袜自拍清纯另类| 亚洲精品视频在线| 日本不卡一二三| 国产精品一区二区黑丝| 成人av电影观看| 欧美亚洲国产bt| 欧美变态凌虐bdsm| 国产精品免费视频观看| 亚洲在线视频免费观看| 婷婷成人激情在线网| 韩国av一区二区三区| 国产suv一区二区三区88区| 91麻豆文化传媒在线观看| 欧美日韩日日骚| 久久亚洲春色中文字幕久久久| 中文字幕欧美国产| 亚洲成人动漫一区| 国产91富婆露脸刺激对白| 欧美亚洲动漫精品| 久久久亚洲午夜电影| 日韩一区在线免费观看| 免费看日韩精品| 91影院在线观看| 日韩欧美精品三级| 亚洲综合色网站| 激情丁香综合五月| 欧美日韩在线观看一区二区| 国产午夜精品久久| 日韩有码一区二区三区| 波多野结衣精品在线| 51精品久久久久久久蜜臀| 国产精品久久久久久一区二区三区| 日韩一区欧美二区| 91一区在线观看| 国产日韩欧美精品综合| 日韩精品乱码av一区二区| 不卡一二三区首页| 久久久午夜电影| 蜜桃av一区二区三区电影| 日本乱人伦aⅴ精品| 中国色在线观看另类| 久久成人精品无人区| 欧美美女一区二区| 一区二区成人在线| 91一区二区在线| 国产精品美女久久久久aⅴ| 国产在线播放一区三区四| 日韩一级欧美一级| 日本成人超碰在线观看| 欧美日本一区二区| 亚洲一区二三区| 日本精品视频一区二区| 亚洲欧美日韩国产另类专区| 成人精品小蝌蚪| 国产精品嫩草久久久久| 国产aⅴ综合色| 国产三级欧美三级| 成人理论电影网| 国产精品伦一区二区三级视频| 国产99精品在线观看| 久久久久青草大香线综合精品| 国产一区在线不卡| 久久久一区二区三区| 国产精品一区二区91| 久久久亚洲国产美女国产盗摄| 国产美女精品一区二区三区| 2022国产精品视频| 国产91丝袜在线播放九色| 亚洲欧美在线视频观看| 一本到三区不卡视频| 亚洲精品乱码久久久久久久久 | 精品免费日韩av| 日韩高清在线观看| 欧美变态口味重另类| 国产成人日日夜夜| 亚洲情趣在线观看| 欧美丰满高潮xxxx喷水动漫| 日韩精品每日更新| 国产亚洲欧美激情| 成人黄色av电影| 亚洲一区二区av在线| 日韩欧美国产高清| 成人黄色免费短视频| 亚洲精品久久久蜜桃| 91麻豆精品国产91久久久更新时间 | 国产精品久久久99| 99国产精品久久久| 日韩av一区二区在线影视| www国产精品av| 日本电影亚洲天堂一区| 美日韩一区二区| 国产欧美日韩三区| 欧美日本韩国一区| 国产风韵犹存在线视精品| 亚洲精品国产精品乱码不99| 日韩一区二区麻豆国产| www.欧美日韩国产在线| 丝袜美腿亚洲综合| 国产精品久久久久影院老司| 欧美情侣在线播放| 成人动漫中文字幕| 蜜桃av噜噜一区| 一区二区三区四区在线| 久久尤物电影视频在线观看| 欧美偷拍一区二区| 丁香一区二区三区| 久久精品国产亚洲高清剧情介绍| 亚洲欧洲一区二区在线播放| 日韩欧美一二三区| 欧美日韩视频一区二区| 成人高清av在线| 国产在线日韩欧美| 琪琪一区二区三区| 亚洲午夜视频在线| 中文字幕一区二区三区在线不卡 | 中文字幕中文字幕在线一区 | 全国精品久久少妇| 亚洲制服丝袜av| 国产精品成人免费精品自在线观看| 日韩一区二区精品| 在线观看91av| 91福利在线导航| 色综合咪咪久久| 国产高清不卡一区二区| 久久99精品久久久久久 | 日韩视频免费观看高清完整版 | 波多野结衣精品在线| 激情久久久久久久久久久久久久久久| 亚洲图片自拍偷拍| 成人免费一区二区三区视频| 久久色在线观看| 久久中文字幕电影| 欧美电影精品一区二区| 日韩一区二区三区免费看| 在线免费av一区| 欧美在线一二三| 欧美性受极品xxxx喷水| 欧美午夜理伦三级在线观看| 在线观看一区日韩| 欧美日韩一区二区在线观看| 欧美性猛交一区二区三区精品| 在线区一区二视频| 欧美日韩精品专区| 日韩一区二区三区av| 欧美videossexotv100| 久久综合久久综合九色| 久久精品人人爽人人爽| 亚洲国产成人私人影院tom| 国产精品三级av在线播放| 亚洲天天做日日做天天谢日日欢 | 波多野结衣精品在线| 91美女片黄在线| 欧美日韩www| 精品久久国产老人久久综合| 久久综合九色综合久久久精品综合| 久久久久久久网| 综合久久综合久久| 午夜久久久影院| 国产一区二区三区黄视频| 色国产精品一区在线观看| 欧美精品一卡两卡| 精品国产凹凸成av人导航| 国产日本欧美一区二区| 亚洲天堂av老司机| 日本网站在线观看一区二区三区| 国产在线看一区| 99视频一区二区| 91麻豆精品国产91久久久使用方法| 精品成人一区二区| 精品一区二区三区在线观看国产| 国产精品一二一区| 欧美做爰猛烈大尺度电影无法无天| 欧美福利电影网| 中文字幕在线一区| 日产欧产美韩系列久久99| 成人综合在线观看| 欧美日韩综合不卡| 国产精品每日更新| 蜜桃视频在线一区| 91官网在线观看| 久久久久免费观看| 天天综合日日夜夜精品| 成人免费av在线| 精品免费国产一区二区三区四区| 有坂深雪av一区二区精品|