PerlのBase64エンコードの改行について

PerlでMIME::Base64モジュールを使ってBase64エンコードを行うと、デフォルトで76文字ごとに改行コード(\n)が入る。

 

use MIME::Base64;

$base64_data = encode_base64($file_data);

 

この改行の挿入は、RFC 2045 (MIME Part One)の仕様に従っているため。
この仕様では、Base64エンコードされたデータは76文字ごとに改行を入れることが推奨されている。
これは、古いメールクライアントでも問題なく表示できるようにするための対策。

改行が入らないようにするには、encode_base64関数の第二引数を指定して空にすることで改行を取り除ける。

  

$base64_data = encode_base64($file_data, "");

 

あまり需要はないかもしれないが、指定文字数で改行を入れるにはこうする。

 

#改行を取る
$base64_data = encode_base64($file_data, "");
#60行ごとに改行入れる
$base64_data =~ s/(.{60})/$1\n/g;