私はCygwinのWindowsパスとして提供されているファイルへの絶対パスを取得しようとしています。それぞれMsys(Git Bash)perlです。私は、提供されたパスが "ネイティブ" Cygwin/MSysパスである場合にも機能するソリューションをご希望です。msysのcygwinでCwd :: abs_pathが壊れた
私はCwd :: abs_pathを使ってみましたが、それは微妙に壊れているようです。
[email protected] MINGW64 /f/Temp
$ perl
use Cwd;
print Cwd::abs_path("F:\\") . "\n";
print Cwd::abs_path("F:\\test.txt") . "\n";
print Cwd::abs_path("..\\test.txt") . "\n";
/f
/f/Temp/F:/test.txt
/f/Temp/../test.txt
ディレクトリの作業、相対パス「仕事」が、(すなわち..解消されていない)私が期待する結果が得られていないが、私は絶対パスにファイル名を追加するとき:ここではテストがあります結果は間違っています。私はCwdが私のためにパスの翻訳をすることを望んでいました。
後で(File :: Specの関数を使用して)パスの一部を抽出し、ファイルを開く必要があります。抽出された部分の作業を続行するには、使用されているperlのバージョンに固有のパスを使用する必要があります。私はcygpathの使用を避けたいと思います.Windowsのパスのみを理解しているActivePerlでもスクリプトを動作させたいからです。私はもちろん、unix-perlのcygpathだけを呼び出すためにいくつかのifを追加することができます。
MSysには、Windowsパスでの作業を容易にするいくつかの規定があります。たとえば、 'perl F:\\ Temp \\ test.pl'は、ウィンドウパスであっても完璧に動作します。私はMSys perlのライブラリも少し助けてくれることを願っていました。 Cwd :: abs_pathはファイルシステムにも触れるので、それが返すものは有効なパスではなく、無効なパスの代わりにエラーを生成します。通常は存在しないパスではそうです。 – adrianN