2010年9月12日日曜日

Perl Base64 (encode|decode)

PerlでBase64 (encode|decode) するには、"uu(en|de)code" を使うと楽な上に高速です。

・エンコード
sub base64_encode ($) {
    my($n,$str) = ("\x0D\x0A",pack 'u',$_[0]);
    my $pad = 3 - (length($_[0]) % 3);
    $str =~ s/^.//mgo and $str =~ s/[$n]+//go;
    $str =~ tr@`!-_@A-Za-z0-9+/@;
    $pad % 3 and substr $str,0 - $pad,$pad,'=' x $pad;
    return do { $str =~ s/(.{76})/$1$n/go; $str.$n; };
}

・デコード
sub base64_decode ($) {
    my $str = shift;
    $str =~ tr@A-Za-z0-9+/@@cd;
    $str =~ tr@A-Za-z0-9+/@`!-_@;
    return join '',map { unpack 'u',pack('c',32 + 0.75 *
    length($_)).$_ } $str =~ /.{1,84}/go;
}

デコードの方法はどのマニュアルか忘れましたが、Perldocで紹介されています。

0 件のコメント:

コメントを投稿