Fandom

JPerl Wiki

Natural encoding

5このwikiの
ページ数
新しいページをつくる
コメント0 シェアする

機能 編集

  • コマンドライン引数のdecode
  • open などの操作対象名の encode
  • 環境変数のdecode/encode --- (追加予定)

コード 編集

package natural_encoding;
use 5.10.1;
use strict;
use Encode;

our $encoding;
our $decoding_argv_done;

sub import
{
    my $class = shift;
    $encoding = shift;
    $encoding ||= eval { ${^ENCODING}->name };

    $decoding_argv_done ||= decode_argv();
    override_by_encoding_funcs();
}

sub decode_argv
{
    @ARGV = map{ decode( $encoding, $_ ) } @ARGV;
    1;
}

sub override_by_encoding_funcs
{
    my $caller = caller(1);

    no strict 'refs';

    *{"${caller}::open"} = sub
    {
        my $file = $_[1];
        $file =~ s/^(\s*[<>]\s*)//;
        my $io = $1 || '<';
        my $io_encoding = "$io:encoding($encoding)";

        if ( $_[0] eq '' )
        {
            # for the newer style: open( my $csv, ... );
            CORE::open( $_[0], $io_encoding, encode( $encoding, $file ) );
        }
        else
        {
            # for the older style: open( CSV, ... );
            my $sym;
            CORE::open( $sym, $io_encoding, encode( $encoding, $file ) );
            *{"${caller}::$_[0]"} = $sym;
        }
    }
}

1;

広告ブロッカーが検出されました。


広告収入で運営されている無料サイトWikiaでは、このたび広告ブロッカーをご利用の方向けの変更が加わりました。

広告ブロッカーが改変されている場合、Wikiaにアクセスしていただくことができなくなっています。カスタム広告ブロッカーを解除してご利用ください。

Fandomでも見てみる

おまかせWiki