次のコードを検討してください。
print cwd . "\n";
$str= "../source"; # note the lower case 's'
chdir($str);
print cwd . "\n";
私の現在のディレクトリがc:\parentdir\Source
(大文字の「S」に注意)の場合、これの出力は次のようになります。
c:/ parentdir / Source c:/ parentdir / source
これにより、フォルダ名の正しい大文字と小文字を区別する私のサブルーチンで問題が発生します。$ strがサブルーチンに渡されるので、正しい大文字と小文字が区別されるかどうかを事前に知ることはできません。一致するパスの大文字と小文字が正しい名前を判別するにはどうすればよい$str
ですか?
詳細はこちら:
- それ
../source
は病理学的な例だと思いますが、それは問題を説明するのに役立ちます。$str
現在のフォルダ以外のフォルダをリクエストしている場合でも発生します。 rel2abs
、のグロブ検索 など、さまざまなオプションを試しましたが、すべて「 」ではなく$str
「」が返されるようです。source
Source
- すべてのディレクトリを検索
$str/..
し、それらをすべて絶対パスに変換して、の絶対パスバージョンと比較することはできます$str
が、それはハックのようです。もっとエレガントなものが欲しいと思っていました。