open関数とUTF8フラグとRedHatLinux9と

Perlのバージョンが5.8.0で、RedHatLinuxのデフォルトのlocaleがen_US.UTF-8になってるとopen関数で開いたファイルに自動的にUTF8フラグをつけようとするという罠があることがわかった。
ま、3引数のopen関数を使うか、Encodeモジュールをきちんと使うか、Localeをきちんと設定しておけば起きないんですが。

教訓としては、

  1. Perlのバージョンは最新にしとけ
  2. 2引数のopenは使うな
  3. Encodeモジュール使え

ということで。。。

再現用プログラム

hoge.pl---
#!/usr/bin/perl -w
use strict;
use warnings;
use Jcode;
open(F,'hoge.txt');
my @line = ;
close F;
print Jcode->new(@line,'euc')->jis;

                          • -

hoge.txt---
ほげ

                          • -

hoge.txt : 文字コード EUC-JP
改行コード LF

再現可能な環境
OSの文字コードの設定

/etc/sysconfig/i18n

                                                                • -

LANG="en_US.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

                                                                • -