[PERL] 09-迴圈@新精讚
文章推薦指數: 80 %
perl的迴圈. ... 迴圈和一般程式語言大同小異,主要有幾種. while. do...while. do...until. foreach ... last 這是最後一筆,等同於其它語言的break.
現在日期2022/10/23星期日
Togglenavigation
現在日期2022/10/23星期日
最新文章[札記]2022.10~12月札記
最新消息開始發表有用的蚊蟑和黴體
數位休閒動漫影音遊戲愉樂網路和服務APACHEMYSQL/Mariadb電腦網路資訊網路協定/設定作業系統WindowsCentosLINUXFreebsdMACIOSunix-like應用其他OS前端程設HTML/CSSJquery/JSFlash/繪圖後端程設PHPopenCV+PythonJAVAPERLC#作者廢言作者碎碎念作者吱吱叫作者喃喃語維修記錄經濟學視野
主題
標準
時間線
更多發現
[無邊框]
精讚新精讚首頁
後端程設PERL
[PERL]09-迴圈
4631
[PERL]09-迴圈
“perl的迴圈„
分享此文連結//n.sfs.tw/11683
分享連結[PERL]09-迴圈@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2020-12-2914:36:51最後編修
2017-08-2313:21:12By張○○
自動目錄
whiledo...whiledo...untilfor輸出數字1-10輸出A-Z26個字母foreach使用foreach列出陣列內容使用foreach列出雜湊內容無限迴圈迴圈的控制nextlastredo
迴圈和一般程式語言大同小異,主要有幾種
while
do...while
do...until
foreach
for
while
寫法
while(符合條件){處理}
作用是當符合條件就處理,如果一開始就不符合條件,迴圈中連一次都不會執行。
while的大括號不可省略。
$a=0;
while($a<10){
print".";#共印出10個點
$a++;
}
do...while
寫法
do{處理}while(符合條件);
和while不一樣是一開始一定會執行一次,然後再判斷會不會繼續執行迴圈。
注意最後面的分號。
$a=0;
do{
print".";
$a++;
}while($a<10);
do...until
寫法
do{處理}until(不符合條件);
和do...while一樣是一開始一定會執行一次,但是在判斷時條件要寫不符合的,才會繼續執行迴圈。
注意最後面的分號,所以上例要改寫成
$a=0;
do{
print".";
$a++;
}until($a>=10);
for
寫法
for(變數初始值;符合條件;運算){處理}
for項目(範圍){處理}
輸出數字1-10
for($ii=1;$ii<=10;$ii++){
print$ii."\n";
}
這樣寫太麻煩了,PERL中可以用範圍運算子來作
for$ii(1..10){
print$ii."\n";
}
再懶點的把$ii也偷懶的省略掉,但省略掉後要怎麼代表$ii呢?
PERL就用一個特殊變數$_來代替,這就是「預設變數」。
在09-雜湊這個單元有先提過,未來只要看到$_也不必大驚小怪了。
改寫後的結果是
for(1..9){
print$_."\n";
}
輸出A-Z26個字母
PERL還有一些神奇的技巧,要用迴圈印出大寫英文字母怎麼做?你不必去翻ASCII然後把數字轉成字元。
只要這樣就行了:
for('A'..'Z'){
print$_."\n";
}
foreach
寫法
foreach項目(陣列或清單){處理}
使用foreach列出陣列內容
@name=qw(JohnMaryRobinson王大明李小美);
foreach$one(@name){
print$one."\n";
}
結果
John
Mary
Robinson
王大明
李小美
上面的$one就是陣列中的項目,在foreach中依序被叫出,如前所述,我們把它省略掉:
@name=qw(JohnMaryRobinson王大明李小美);
foreach(@name){
print$_."\n";
}
使用foreach列出雜湊內容
在09-雜湊這個單元已有提過傾印出雜湊的內容,讀者可前往參考。
無限迴圈
無限迴圈會造成你程式的死當,使用上得小心。
while(1){..}
for(;;){...}
do{...}while(1)
迴圈的控制
迴圈的控制有三種
next下一筆記錄,等同於其它語言的continue
last這是最後一筆,等同於其它語言的break
redo重新開始執行
next
next是跳下一筆項目,在next後面的程式不會被執行,例如印九九乘法,但是不印平方數(2*2,3*3,4*4...)
for($ii=2;$ii<10;$ii++){
for($jj=2;$jj<10;$jj++){
nextif$ii==$jj;
print"$ii*$jj=".$ii*$jj."\t";
}
print"\n";
}
第3行判斷如果乘數被乘數相同就跳下一個項目
第4行\t是定位符號
結果
2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*2=6 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*2=8 4*3=12 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*2=10 5*3=15 5*4=20 5*6=30 5*7=35 5*8=40 5*9=45
6*2=12 6*3=18 6*4=24 6*5=30 6*7=42 6*8=48 6*9=54
7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*8=56 7*9=63
8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*9=72
9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72
last
last直接跳出迴圈,該迴圈後面的項目不會被處理,如果有多層迴圈只會跳出該層。
例如把上面的程式第3行的next改為last。
代表只要遇到乘數被乘數相同,後面的項目都不執行:
lastif$ii==$jj;
結果
3*2=6
4*2=8 4*3=12
5*2=10 5*3=15 5*4=20
6*2=12 6*3=18 6*4=24 6*5=30
7*2=14 7*3=21 7*4=28 7*5=35 7*6=42
8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56
9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72
如果遇到某些情況要跳出多層迴圈要怎麼處理,PERL提供了標籤的功能,可以在迴圈前加上標籤。
假設上面的範例中,相乘大於50就停止二層迴圈:
CYCLE1:for($ii=2;$ii<10;$ii++){
for($jj=2;$jj<10;$jj++){
lastif$ii==$jj;
lastCYCLE1if$ii*$jj>50;
print"$ii*$jj=".$ii*$jj."\t";
}
print"\n";
}
第1行這個迴圈標記名稱CYCLE1
第4行中如果相乘大於50,last到標籤CYCLE1
結果
3*2=6
4*2=8 4*3=12
5*2=10 5*3=15 5*4=20
6*2=12 6*3=18 6*4=24 6*5=30
7*2=14 7*3=21 7*4=28 7*5=35 7*6=42
8*2=16 8*3=24 8*4=32 8*5=40 8*6=48
redo
這個項目重做一次迴圈,這個操作只會進行迴圈中{}裡面的操作,不會再去評估是否符合條件(如果有設條件的話,例如while(條件))
我舉一個範例,假設Mary,Steve,John三個人要隨機抽數字,沒抽中就重抽,直到中為止,列出大家要抽中的需要的次數
@name=('Mary','Steve','John');
$prizenum=33;
$pick=0;
foreach(@name){
$yournum=intrand()*100;
$pick++;
redoif$prizenum!=$yournum;
print"$_抽了$pick次得獎\n";
$pick=0;
}
第5行rand()是取亂數的函式,數字會在0>
姓名*
EMAIL*
留言內容*
我是人類*
限制:留言最高字數1000字。
限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。
訪客留言
[無留言]
隨機好文
[Freebsd]使用ADSL撥接上網Freebsd上要使用ADSL撥接上網,該如何設定?
[PHP]檢查IP是否在某個網段內mtachcidr要檢查IP是否在某個網段內,要寫幾行?10行?5行?不用,只要2行。
以下是我寫的code/***matchCI
問問題問問題其實內涵很深,我悟了很久才懂。
有人問題的目的並不一定是想要得到答案,有時只是純粹想問問題..
[Wildfly10]發佈war檔deploywarfileontowildfly10
[NetBeans]使用git複製別人的專案NetBeans使用git複製別人的專案及版本控制
whiledo...whiledo...untilfor輸出數字1-10輸出A-Z26個字母foreach使用foreach列出陣列內容使用foreach列出雜湊內容無限迴圈迴圈的控制nextlastredo
到最頂端
到中間
到最底端
延伸文章資訊
- 1Perl last Statement - javatpoint
Using the Perl last statement alone, you can exits only innermost loop. If you want to exit a nes...
- 2How do I break out of a loop in Perl? - Stack Overflow
Bareword "break" not allowed while "strict subs" in use at ./final.pl line 154. Is there a workar...
- 3Perl do while - Perl Tutorial
The last statement exits the do...while loop immediately. It acts as the break statement in C/C++...
- 4[PERL] 09-迴圈@新精讚
perl的迴圈. ... 迴圈和一般程式語言大同小異,主要有幾種. while. do...while. do...until. foreach ... last 這是最後一筆,等同於其它語言的...
- 5Perl last Statement
The Perl last statement is used inside a loop to exit the loop immediately. The last statement is...