Mail::Message::Encode クラス
Mail::Message::Encode の使い方の見本
[リファレンス]
fml-help ML's Count: 02012, 02013, 02016 など
[使い方の例]
* fml 8.0 風の使い方
use Mail::Message::Encode;
my $encode = new Mail::Message::Encode;
my $str_euc = $encode->convert( $s, 'euc-jp' );
my $str_euc = $encode->convert( $s, 'euc-jp', 'iso-2022-jp' );
my $encode = new Mail::Message::Encode;
my $status = $encode->convert_str_ref( \$s, 'euc-jp' );
my $status = $encode->convert_str_ref( \$s, 'euc-jp', 'jis' );
my $fp = sub { ... };
$encode->run_in_chcode( $fp, $oout, $in );
* fml 4.0 互換風の使い方
ues Mail::Message::Encode qw(STR2EUC);
my $euc_s = STR2EUC( $s );
Mail::Message::Encode の仕様の粗筋
本体はプライベートメソッド _convert_str_ref() にまとめてある。
sub convert # 引数が STR
{
my ($self, $str, $out_code, $in_code) = @_;
_convert_str_ref(\$str, $out, $in);
return $str;
}
sub convert_str_ref # 引数が STR_REF
{
my ($self, $str, $out, $in) = @_;
_convert_str_ref($str, $out, $in);
}
sub _convert_str_ref # 引数が STR_REF
{
my ($str, $out, $in) = @_;
# 1. 推測
もし $in がない → 推測 → 失敗 → 0 をかえす?
# 2. 変換をトライ
if ($in がわかった or $in が指定された) {
$out へ変換
jcode, Jcode, Encode は perl バージョンによって
よろしく変換をがんばる
return 1 ; #成功
}
else { # principle of least surprise ?
なにもしない# str はそのまま返す
}
return 0 ; # 失敗
}
sub base64 {}
sub quoted_printable {}
があるといいかな〜
$x = $encode->base64($s);
また、互換性というか便宜上、STR2XXX() も準備する。
STR2EUC( $str, [$icode] )
STR2JIS( $str, [$icode] )
STR2SJIS( $str, [$icode] )
は convert_str_ref を wrap する。
ユーティリティ run_in_chcode()
言語依存処理の過程では、プログラムの扱いやすい文字コードに変換し、
処理を行なう関数が多数存在します。
そこで、そういった処理のための下請け関数を用意すると便利です。
run_in_chcode() は、
関数 $proc を実行します。
引数は、あらかじめ指定された文字コードに変換後、
関数 $proc に渡されるという仕様です。
sub run_in_code
{
my ($self, $proc, $s, $args, $out_code, $in_code) = @_;
my $proc_status = undef;
my $obj = new Mail::Message::Encode;
my $conv_status = $obj->convert_str_ref(\$s, $out_code, $in_code);
# XXX-TODO: validate $proc name regexp.
eval q{
$proc_status = &$proc($s, $args);
};
# XXX-TODO: correct ?
if ($conv_status && $out_code) {
$obj->convert_str_ref($s, $out_code, $in_code);
}
return wantarray ? ($conv_status, $proc_status): $conv_status;
}
これは、次のように動作します。
$s は EUC-JP へ変換。
$proc($s, $args); を実行
$proc の実行結果を返す。