どのようなPerlのモジュール(複数可)私は、Windows上の相対的なものから(ファイル名を含む)絶対パスを取得するために使用しますか?
-
20-09-2019 - |
質問
私は、私だけが正しく探していないよ想像することができます。これは、ここで求められることには明らかな質問のように思えます。私の謝罪これが重複している場合。
私は、コマンドライン引数としてファイル名を取るPerlプログラムを書いています。私は、絶対パス(具体的にはWin32の:: OLEで動作するように)にファイル名(または付属の相対パスとファイル名)を変換する必要があります。
、私は 『 CWD の 'S』腹筋_経路を使用してみました、それはほとんど私が何をしたいんしかし、それは代わりのWin32 1のUnixスタイルのパスを使用してそれを返します。
のパスに変換します、または、おそらくより良いモジュールが最初の場所で使用するモジュールはありますか?
解決
私はファイル::スペックでからrel2abs
を使用しています。あなたはしかし注意する必要があります:getdcwd
からCwd
を呼ぶかもしれないこと、そしてそれはあなたが現在のドライブの現在の作業ディレクトリをしたいと仮定します。ファイルが他のドライブにある場合は、あなた自身のことを修正またはベースパスを設定する2番目の引数を指定する必要があります。
他のヒント
use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;
print "FOO: $foo\n";
私は、CWDの腹筋_経路を使用して、私はの時にスラッシュを変換するために、正規表現を使用して、本当にのことが行われなければなりません。しかし、私は、ほとんどの用途のために、Unixスタイルのスラッシュがうまく動作することを発見しました。それは時折、私はスラッシュに変換する必要が終わる「といううるさく限られたプログラムにファイル名を渡す」だけのためです。
use Cwd 'abs_path';
my $path = abs_path($rel_path);
# and only if necessary...
$path =~ s'[/\\]+'\\'g; # use Windows-style slashes
$path =~ s'^\\'\\\\'; # handle network path
しかし、その後..私はとか、マップされたドライブ参照することなく、ネットワークパスの多くを使用します。あなたの走行距離は異なる場合があります。