結論から言うと、UTF-8を内部コードにしているとき、Windows で日本語ファイル名を使いたいときは、プログラムの頭でこんな風に宣言すると便利である。 use strict; use encoding 'shiftjis'; use open ':encoding(shiftjis)'; use open ':std'; use File::Spec::Functions; use subs qw(open); sub open { use Encode; return CORE::open(shift,encode('shiftjis',shift),encode('shiftjis',shift)); } Perl 5.8.X では内部コードに UTF-8が使える。しかし、そのために日本語のファイル名が正しく扱えないことがある。 たとえば、次のプログラムは何の問題もなく動作する。