PerlをWindows上で動かしたところディレクトリかどうかの判定がうまくいきません。

「表」というファイルを作成して、 -d で結果を取得するとファイルなのにディレクトリと判定されてしまいます。
opendir()も成功してしまいます。文字コードまわりの処理は正しく書いたつもりなのですが。。。

ファイル名を「あ」とした場合は問題ありません。
正しく判定できる方法を教えてください。Win32::OLEなどを利用した方法でもかまいません。

--- ソース ---
use Encode;
use utf8;
use strict;

my $ENCODING = 'cp932';

binmode(STDIN,":encoding($ENCODING)") ;
binmode(STDOUT,":encoding($ENCODING)") ;
binmode(STDERR,":encoding($ENCODING)") ;

my $dir = "C:\\表"; #「表」っていうファイルはある

# ディレクトリかどうか?
if (-d encode($ENCODING, $dir)) {
print "FOUND DIR ". $dir ."\n";
} else {
print "NOT FOUND DIR\n";
}

# ファイルかどうか?
if (-f encode($ENCODING, $dir)) {
print "FOUND FILE". $dir ."\n";
} else {
print "NOT EXISTS \n";
}

# opendirしてみる
opendir(DIR, encode($ENCODING, $dir)) or die $!;
while (my $file = readdir(DIR)) {
$file = decode($ENCODING, $file);
print "FILE: ".$file."\n";
}

--- 結果 ---
FOUND DIR C:\表
NOT EXISTS
FILE: 表

--- 環境 ---
Win XP SP3
ActivePerl 5.10.0 Build 1005

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/08/15 00:01:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません