Perl 入門指南 - GUI 中的編碼與解碼





































Perl 入門指南 - GUI 中的編碼與解碼






我們現在要來在 GUI 中建置編碼與解碼的功能




完整程式請參考

  • Encrypt.pm

  • guidemo.pl





雖說是用 Encrypt 套件 (package) 的 toEncode 方法 (method) 進行編碼,但在 GUI 仍須考慮實際的情況。例如使用者可能沒有輸入任何文字,或是沒有先按 New 建立新的 Encrypt 物件就按下 Encode ,嗯,這都有可能發生無法執行的情況,甚至有可能導致程式就此當掉。


實際上若是發生類似的情況, Perl 直譯器 (interpreter) 還不致於當掉,倒是會發起例外 (exception) 結束或暫停程式執行,可是這樣程式跑起來就顯得卡卡的,總是給使用者一些不舒服的感覺。這樣不好,所以先做個例外處理 (exception handling) 不外是個好的程式設計建議。


Perl 用 try 偵測例外情況,但其實如果能不做例外處理就不做例外處理的好,為什麼呢?因為例外處理說起來讓直譯器先去檢查是否發生例外,這會讓程式執行上增加許多負擔,簡單說,需要額外的記憶體空間與處理器時間,也許在我們這樣的小程式看不出來,但是在大型程式中,這個缺點就顯而易見了。


不用例外處理的話,這樣的問題要解決也不難。因為 $userinput 有設置初值為空字串 (string) ,若使用者沒有輸入文字的話,從 $input_field 取得的值也會是空字串,另外沒有新建 $encrypt 的話, $encrypt 的初值就是 -1 。


因此,我們用 if-else 檢查可能的情況就可以了。編碼在 GUI 中為 encode_button 副程式,如下
sub encode_button {
$userinput = $input_field->get();
if ($userinput eq "") {
$display_message = "No input string!!";
}
else {
if ($encrypt == -1) {
$display_message = "No encrypt object!!";
}
else {
$result = $encrypt->toEncode($userinput);
$output_field->delete('0', 'end');
$output_field->insert('end', $result);
$display_message = "Encoding success!!";
}
}
}



如果使用者沒有輸入文字,訊息欄就顯示 "No input string!!" ,同樣的沒有新建 $encrypt ,訊息欄也提示相關訊息 "No encrypt object!!" ,而使用者有輸入文字亦有新建 Encrypt 物件的話,就把結果顯示到 $output_field ,訊息欄就顯示 "Encoding success!!" 。


解碼方法 decode_button 幾乎與 encode_button 完全相同,除了把 toEncode 換成 toDecode 之外
sub decode_button {
$userinput = $input_field->get();
if ($userinput eq "") {
$display_message = "No input string!!";
}
else {
if ($encrypt == -1) {
$display_message = "No encrypt object!!";
}
else {
$result = $encrypt->toDecode($userinput);
$output_field->delete('0', 'end');
$output_field->insert('end', $result);
$display_message = "Decoding success!!";
}
}
}



來執行看看囉!下面是編碼



下面是解碼



如果有編碼結果不錯,我們想保存密碼表的話,就要建置存檔與載入的功能囉!






























中英文術語對照
套件package
方法method
直譯器interpreter
例外exception
例外處理exception handling
字串string



您可以繼續參考
GUI 篇

  • GUI 的基本概念

  • 整合 Encrypt 套件

  • GUI 中的編碼與解碼

  • 存檔與載入

  • 完成版的 guidemo.pl

  • 下一步





相關目錄

回 Perl 入門指南
回 Perl 教材
回首頁



參考資料

http://search.cpan.org/~ni-s/Tk-804.027/pod/UserGuide.pod
http://search.cpan.org/~ni-s/Tk-804.027/pod/Button.pod
http://search.cpan.org/~ni-s/Tk-804.027/pod/Entry.pod
http://search.cpan.org/~ni-s/Tk-804.027/pod/Label.pod







沒有留言:




















window.___gcfg = { 'lang': 'zh-TW' };





Popular posts from this blog

迅雷 Thunder 7.9.43.5054 免安裝版 (9.1.41.914 安裝版) - 支援BT下載的萬用 檔案下載工具

qBittorrent 4.1.1 免安裝中文版 - 取代uTorrent的BT下載器

Nhiều đồn đoán cho rằng bộ đồ "phá vỡ quy tắc" của Meghan Markle được lấy cảm hứng từ trang phục của Công nương Diana