目錄

名稱

Encode::Encoder -- 物件導向編碼器

語法

use Encode::Encoder;
# Encode::encode("ISO-8859-1", $data); 
Encode::Encoder->new($data)->iso_8859_1; # OOP way
# shortcut
use Encode::Encoder qw(encoder);
encoder($data)->iso_8859_1;
# you can stack them!
encoder($data)->iso_8859_1->base64;  # provided base64() is defined
# you can use it as a decoder as well
encoder($base64)->bytes('base64')->latin1;
# stringified
print encoder($data)->utf8->latin1;  # prints the string in latin1
# numified
encoder("\x{abcd}\x{ef}g")->utf8 == 6; # true. bytes::length($data)

摘要

Encode::Encoder 讓您能以物件導向的方式使用 Encode。這不僅比函數式方法更直覺,而且在您想要堆疊編碼時也更方便。假設您想要將 UTF-8 字串轉換為 Latin1 再轉換為 Base64:您可以簡單地說

my $base64 = encoder($utf8)->latin1->base64;

而不是

my $latin1 = encode("latin1", $utf8);
my $base64 = encode_base64($utf8);

或更懶惰、更複雜的

my $base64 = encode_base64(encode("latin1", $utf8));

說明

以下是此模組的使用方式。

預定義方法

此模組預定義以下方法

$e = Encode::Encoder->new([$data, $encoding]);

傳回一個編碼器物件。如果存在,其資料會用 $data 初始化,如果存在,其編碼會設定為 $encoding。

當遺漏 $encoding 時,如果 $data 已為 utf8,則預設為 utf8,否則為 ""(空字串)。

encoder()

是 Encode::Encoder->new() 的別名。此別名會依需求匯出。

$e->data([$data])

當 $data 存在時,將執行個體資料設定為 $data 並傳回物件本身。否則,傳回目前的執行個體資料。

$e->encoding([$encoding])

當 $encoding 存在時,將執行個體編碼設定為 $encoding 並傳回物件本身。否則,傳回目前的執行個體編碼。

$e->bytes([$encoding])

從 $encoding 解碼執行個體資料,如果遺漏則解碼執行個體編碼。如果轉換成功,執行個體編碼會設定為 ""。

名稱 bytes 是經過深思熟慮的選擇,以避免名稱空間污染——此模組可用作基底類別,因此避免使用出現在 Encode::Encoding 中的方法名稱。

範例:base64 轉碼器

此模組設計為與 Encode::Encoding 搭配使用。若要讓上述的 Base64 轉碼器範例真正發揮作用,您可以撰寫類似這樣的模組

package Encode::Base64;
use parent 'Encode::Encoding';
__PACKAGE__->Define('base64');
use MIME::Base64;
sub encode{ 
    my ($obj, $data) = @_; 
    return encode_base64($data);
}
sub decode{
    my ($obj, $data) = @_; 
    return decode_base64($data);
}
1;
__END__

而呼叫您的模組會類似這樣

use Encode::Encoder;
use Encode::Base64;

# now you can really do the following

encoder($data)->iso_8859_1->base64;
encoder($base64)->bytes('base64')->latin1;

運算子重載

此模組重載了兩個運算子,字串化 ("") 和數字化 (0+)。

字串化會傾印物件內的資料。

數字化會傳回執行個體資料中的位元組數。

當您想要列印或找出資料大小時,它們會派上用場。

另請參閱

EncodeEncode::Encoding