ちょっとだけソース見てみた

引数が 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);
}

とか。ご参考まで。