[Perl] ISO-2022-JPのエンコードの件の続き

メモ

下の記事で、MIME::Header::ISO-2022-jpはおそいんじゃね?と言っておりましたが、
どーしょーもないので、こういうコードはどうだ?とやってみました。

 http://cast-a-spell.at.webry.info/201005/article_4.html


Index: ISO_2022_JP.pm
===================================================================
--- ISO_2022_JP.pm
+++ ISO_2022_JP.pm
@@ -87,6 +87,7 @@
sub _add_encoded_word {
  my ( $str, $line, $bpl ) = @_;
  my $result = '';
+  my $dbpl = int($bpl/4*3); # bplの文字数をデコードした際の文字数

  while ( length($str) ) {
    my $target = $str;
@@ -109,7 +110,11 @@
      my $encoded =
       HEAD . MIME::Base64::encode_base64( $iso_2022_jp, '' ) . TAIL;

-      if ( length($encoded) + length($line) > $bpl ) {
+      if ( length($encoded) + length($line) > ($bpl+1) * 2 ) {
+        # 長すぎる場合は一気に切り出す
+        $target =~ s/((?:$RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C}|$RE{ASCII}){$dbpl})((?:$RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C}|$RE{ASCII})+)$/$1/;
+        $str = $2 . $str;
+      } elsif ( length($encoded) + length($line) > $bpl ) {
        $target =~
         s/($RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C}|$RE{ASCII})$//o;
        $str = $1 . $str;



まあ、大した事はやってなくて、一文字ずつ切り出してるのが嫌なので、付近までいっきに切り出してるよーにした、という所。
一応、ベンチの数値はメモをもってくるのを忘れたけれど、速度も速くなってる。
Encodeのテストは通ったんだけれど、もう少しテストしてみて、さてどうかという所かな。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック