内容

名称

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