[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .

ユーティリティ run_in_chcode()

言語依存処理の過程では、 プログラムが扱いやすい文字コード(内部処理コード)に変換し、 処理を行なう関数が多数存在します。 そこで、そういった処理のための下請け関数を用意しておくと便利です。

run_in_chcode() は、 引数にある関数 $proc を実行します。 関数 $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;
}
これは、次のように動作します。
(1) $s を EUC-JP へ変換。
(2) $proc($s, $args); を実行。
(3) $proc の実行結果を返す。

[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .
Copyright (C) 1993-2022 Ken'ichi Fukamachi mail:< fukachan at fml.org >