2011年12月14日 星期三

迴圈控制敘述(Loop Control Statements)

迴圈控制敘述(Loop Control Statements)

我們知道迴圈可以幫助程式,「反覆進行」同一個區塊內的運算,

但有時候我們會希望,迴圈能「跳過」某次運算,或是「轉向」其他程式區塊。

這個「跳過」或「轉向」的操作,就是這篇迴圈控制要說明的部分了。

靈活的迴圈控制能節省程式執行時間,

但必須謹慎的使用,避免程式結構被破壞而導致維護上的困難。

之前提過的forforeachwhileuntil

我們在控制敘述的重複執行有說明,

在這裡我們就討論,怎麼在這幾個迴圈內做操作吧!


last

顧名思義就是讓迴圈停止。

用法是寫在迴圈內,我們來用例子說明:

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

if($i==8) # 當$i為8時

{

last; # 終止迴圈

}

print $i; # 把$i印出來

}

執行結果就會看到 只印到7就不執行了。

如果要偷懶點的寫法,可以寫成:

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

last if($i==8); # 當$i為8時終止

print $i; # 把$i印出來

}

執行結果會是相同的。


redo

可以讓迴圈重複執行一次,

用法同樣是寫在迴圈內,來看例子:

$count=0; # 迴圈外放一個計數器

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

$count++;

redo if($count==8); # 當$count為8時重作"一次"迴圈

print $count; # 把$count印出來

}

執行結果就會看到,8多加了一次,結果就是8沒有印出來。


next

既然可以讓迴圈停止、重作,

當然,一樣就有「略過」的控制敘述,

用法同樣是寫在迴圈內,來看例子:

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

next if($i==8); # 當$i為8時略過

print $i; # 把$i印出來

}

執行結果就會看到,8沒有被印出來。


知道了迴圈的「終止」、「重作」、「略過」之後,

最後一個我們要看的,是用來做「轉向」的標籤(Label)

標籤的作用是讓Perl知道接下來要跳到哪裡去,

很多程式設計師很反對使用標籤,因為會對程式架構上,有一定程度的破壞。

不過阿逸自己則是認為,適時的使用反而會增加方便性。

有時候單單利用nextlast無法逃離迴圈到正確的地方時,

就會使用到標籤(Label)。標籤使用方式為:

1.定義標籤所在位置及名稱,要大寫,並且要有冒號(:)。

2.使用時,加上goto 以及標籤名稱。

直接來看怎麼用吧:

@array= qw/123 456 789 246 468 135 357/; # 依序放入陣列

$pattern= 456; # 用來比對的樣式

foreach (@array)

{

print $_; # 印出每次讀取的陣列內容

if ($pattern== $_) # 比對成功時

{

goto LABEL; # 轉向到標籤點

}

}

LABEL: # 記住 這裡是使用冒號(:) 表示標籤的定位點

執行結果就會看到,符合條件後,程式就跳到迴圈外的標籤。


接下來就要加入一些檔案處理的觀念了,

要進行的部分是Perl的檔案存取

2011年12月8日 星期四

我的作品練習 - Perl/tk 線上查價軟體

首先簡介一下Tk是什麼。
Tk是一個GUI 函式庫,你可以用它來為你的程式,
加上圖形化的使用者介面(Graphical User Interface)。
Tk可以與眾多語言配合使用,例如 tcl, perl, ruby, python, java, c, c++, ...
因此而有了 tcl/tk, python/tk, perl/tk, ...
而這裡所使用的就是我自己使用perl/tk的實作展示。

很抱歉的是,暫時不公開程式碼,
因為有其他用途,所以先講講這程式功能吧!

程式說明:
功能為查詢兩個線上購物網站(Yahoo、momo),並將查詢結果回傳,
回傳內容同時包含圖片以及售價,
如果遇到查詢無結果時,會給予符合筆數為0並顯示Not Found圖片。

輸入想要查詢的東西 (目前以3C產品為主)
按下底下的按鈕”開始找東西啦!!!” 便會回傳查詢結果:
而如果出現無查詢結果時,會顯示Not Found圖示: