ちょっとだけソース見てみた
引数が UTF-8フラグつきであればUnicode版のwopen を使えば解決する話だとおもってるんだけど、どうなのかなぁ。まあ文句を言う先があるとすればp5pとActiveStateで、日本語でBlogにごちゃごちゃ書いても何の意味もないですね。自分も含めて(自戒メソッド)
全部検証したわけではないけど、win32.hの477行目、#define USING_WIDE() (0) を (1) にしてからコンパイルしてやるだけでワイド対応できそうな感じ。>miyagawaさん
以下5.8.8 (stable)のソース(win32.c)から一部抜粋。
win32_opendir(char *filename) { (中略) /* do the FindFirstFile call */ if (USING_WIDE()) { A2WHELPER(scanname, wbuffer, sizeof(wbuffer)); fh = FindFirstFileW(PerlDir_mapW(wbuffer), &wFindData); } else { fh = FindFirstFileA(PerlDir_mapA(scanname), &aFindData); } (中略) /* now allocate the first part of the string table for * the filenames that we find. */ if (USING_WIDE()) { W2AHELPER(wFindData.cFileName, buffer, sizeof(buffer)); ptr = buffer; } else { ptr = aFindData.cFileName; }
とか、
win32_open(const char *path, int flag, ...) { (中略) if (USING_WIDE()) { A2WHELPER(path, wBuffer, sizeof(wBuffer)); return _wopen(PerlDir_mapW(wBuffer), flag, pmode); } return open(PerlDir_mapA(path), flag, pmode); }
とか。ご参考まで。