From 86a52769ded52eebbd7c4819e15ab67070e1a613 Mon Sep 17 00:00:00 2001 From: fukachan Date: Thu, 18 Mar 2010 20:28:04 +0000 Subject: fixed and clean up. --- fml/doc/ja/tutorial/module/encode.sgml | 72 ++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 17 deletions(-) (limited to 'fml/doc/ja/tutorial/module/encode.sgml') diff --git a/fml/doc/ja/tutorial/module/encode.sgml b/fml/doc/ja/tutorial/module/encode.sgml index 5309876e..6449d220 100644 --- a/fml/doc/ja/tutorial/module/encode.sgml +++ b/fml/doc/ja/tutorial/module/encode.sgml @@ -1,5 +1,5 @@ @@ -7,6 +7,12 @@ Mail::Message::Encode クラス + + + + Mail::Message::Encode の使い方の見本 + + [リファレンス] fml-help ML's Count: 02012, 02013, 02016 など @@ -15,6 +21,8 @@ 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' ); @@ -27,19 +35,22 @@ fml-help ML's Count: 02012, 02013, 02016 my $fp = sub { ... }; $encode->run_in_chcode( $fp, $oout, $in ); - * 4.0 互換 + * fml 4.0 互換風の使い方 + ues Mail::Message::Encode qw(STR2EUC); my $euc_s = STR2EUC( $s ); + + - + - Mail::Message::Encode の仕様 + Mail::Message::Encode の仕様の粗筋 -本体は _convert_str_ref() にまとめる。 +本体はプライベートメソッド _convert_str_ref() にまとめてある。 sub convert # 引数が STR @@ -100,29 +111,56 @@ $x = $encode->base64($s); - + - run_in_chcode() + ユーティリティ run_in_chcode() -言語依存処理の過程では、プログラムの扱いやすいコードに変換し、処理を行 -なう関数が多数存在します。そこで、そういった関数を用意すると便利です。 - -run_in_chcode の実装例 +言語依存処理の過程では、プログラムの扱いやすい文字コードに変換し、 +処理を行なう関数が多数存在します。 +そこで、そういった処理のための下請け関数を用意すると便利です。 + -sub run_in_chcode + +run_in_chcode() は、 +関数 $proc を実行します。 +引数は、あらかじめ指定された文字コードに変換後、 +関数 $proc に渡されるという仕様です。 + + + + +sub run_in_code { - my ($self, $proc, $s, $out_code, $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); - my $conv_status = convert_str_ref($s, $EUC_JP, $in_code); - my $proc_status = &$proc($s, @_); - convert_str_ref($s, $out_code, $EUC_JP) if $conv_status && $out_code; - return wantarray ? ($conv_status, $proc_status): $conv_status; + # 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 の実行結果を返す。 + + -- cgit v1.2.1