結論から言うと、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が使える。しかし、そのために日本語のファイル名が正しく扱えないことがある。 たとえば、次のプログラムは何の問題もなく動作する。
![Windows 版 ActivePerl 5.8.X で日本語のファイル名を使う。](https://cdn-ak-scissors.b.st-hatena.com/image/square/fc285c474719164b6b0dc080f2f60184e7a69f50/height=288;version=1;width=512/https%3A%2F%2Fhardsofttalk.up.seesaa.net%2F003995581%2Fbake-bake.jpg)