Perl 入門指南 - new 方法
- Get link
- X
- Other Apps

Perl 入門指南 - new 方法
new 方法 (method) 是物件 (object) 的建構子 (constructor) ,透過 new ,我們可以建立物件的實體

其實 new 只是一個習慣用的名稱,我們需要一個方法當作建構子,實際建構子的名稱不一定要用 new 。
完整程式請參考
- Encrypt.pm
我們需要將 new 更改如下
sub new {
my $class = shift;
my $self = {
alph => shift,
code => shift,
};
$self->{alph} = join("", ("a" .. "z"));
$self->{code} = join("", shuffle(("a" .. "z")));
bless $self, $class;
return $self;
}
裡頭用 my 宣告兩個屬於 new 的變數,第一個 $class 為物件的套件名稱
my $class = shift;
第二個 $self 是一個匿名的雜湊型態 (anonymous hash) ,需要用純量變數 (scalar variable) 當參考
my $self = {
alph => shift,
code => shift,
};
這個匿名雜湊裡面的 alph 與 code 就是物件的屬性 (attribute) ,接下來的兩行便是初始化 alph 與 code
$self->{alph} = join("", ("a" .. "z"));
$self->{code} = join("", shuffle(("a" .. "z")));
shuffle 是用來攪亂陣列 (array) 順序的,這樣我們可以得到一個隨機排列的英文字母表,因此 code 就是我們需要的密碼表囉!可是 shuffle 是在模組庫中的,因此要先 use 進來
use List::Util qw(shuffle);
new 接下來使用 bless
bless $self, $class;
bless 是把 $class 與 $self 放到物件中,使這兩個真正成為物件的屬性。記得,最後要 return $self
return $self;
這樣 new 方法就完成了,我們再增加一個 getCode() 方法,用來取得密碼表,如下
sub getCode {
my $self = shift;
return $self->{code};
}
我們用下面的程式來測試一下吧
#!/usr/bin/perl
use strict;
use warnings;
use Encrypt;
my $e = new Encrypt;
my $c = $e->getCode();
print "code : $cn";
# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:encryptdemo2.pl
# 功能:示範 Perl 程式
# 作者:張凱慶
# 時間:西元 2013 年 1 月
執行結果如下

結果 ok !接下來我們繼續加入編碼與解碼的功能吧!
中英文術語對照 | |
---|---|
方法 | method |
物件 | object |
建構子 | constructor |
匿名的雜湊型態 | anonymous hash |
純量變數 | scalar variable |
屬性 | attribute |
陣列 | array |
您可以繼續參考
軟體開發
- 特別變數
- my 與 use
- Encrypt 模組
- new 方法
- 編碼與解碼
- 認識 CPAN
相關目錄
回 Perl 入門指南
回 Perl 教材
回首頁
參考資料
http://perldoc.perl.org/perlootut.html
http://www.tutorialspoint.com/perl/perl_oo_perl.htm
訂閱:
張貼留言 (Atom)
window.___gcfg = { 'lang': 'zh-TW' };
- Get link
- X
- Other Apps
3 則留言:
施泰年
提到...
謝謝你提供這麼好的學習
不過在這邊文章中發現了程式碼有些問題
請問是否在sub new裡的
12 行alph=< shift, 應改成 alph=>shift,
13 行code =< shift, 應改成 code=>shift,
15 行$self-<{alph} = join("", ("a" .. "z")); 應改成 $self->{alph} = join("", ("a" .. "z"));
16 行$self-<{code} = join("", shuffle(("a" .. "z"))); 應改成 $self->{code} = join("", shuffle(("a" .. "z")));
還有sub getCode裡的
23行 return $self-<{code}; 應改成 return $self->{code};
還有encryptdemo2.pl裡的
my $c = $e-getCode();
2015年10月9日 上午12:03
Burke Lin
提到...
承上篇留言
my $c = $e-getCode();
要改成
my $c = $e->getcode();
2015年12月2日 下午2:37
Kaiching Chang
提到...
已修改錯誤,感謝指正 ^_^
2015年12月4日 上午9:13
張貼留言