commit-email.pl が文字化けするのでパッチを当てた

ソースコードUTF-8, SJIS, JIS 混在なので svnlook diff で文字化けしてしまう問題。
http://d.hatena.ne.jp/kenrouse/20061201/p1
を参考にして、パッチを当てた。

*** commit-email.pl.tmpl        2008-08-31 19:08:09.000000000 +0900
--- commit-email.pl     2009-02-23 22:09:26.000000000 +0900
***************
*** 38,43 ****
--- 38,45 ----
  
  use strict;
  use Carp;
+ use Encode;
+ use Encode::Guess qw/ shiftjis euc-jp utf8 7bit-jis /;
  my ($sendmail, $smtp_server);
  
  ######################################################################
***************
*** 584,589 ****
--- 586,599 ----
                                          '-r', $rev, @no_diff_deleted,
                                          @no_diff_added);
          @difflines = map { /[\r\n]+$/ ? $_ : "$_\n" } @difflines;
+         foreach $_ (@difflines)
+           {
+             my $guess = Encode::Guess::guess_encoding($_);
+             if (ref $guess && $guess->name ne 'utf8')
+               {
+                 Encode::from_to($_ , $guess->name, 'utf8');
+               }
+           }
        }
  
      if (defined $sendmail and @email_addresses)

パッチを当てた後で、
http://d.hatena.ne.jp/kenrouse/20070104/p1
のエントリに気づいた。こっちの方がスマートだなぁ。
map には式しか書けないのかな? と思っていたが、どうやらブロックを渡しているので普通にステートメントも書けるらしい。


perl はこういう機会でもないとソースを読まないので、すぐに特殊変数の意味を忘れて毎回リファレンスを漁る羽目になる罠。