6

正しく検索していないとしか思えません。これは、ここで尋ねられる明らかな質問のようです。これが重複している場合は申し訳ありません。

ファイル名をコマンドライン引数として受け取る Perl プログラムを作成しています。ファイル名 (または相対パスが添付されたファイル名) を絶対パスに変換する必要があります (具体的には Win32::OLE で作業するため)。

私はCwdの 'abs_path' を使用してみましたが、それはほとんど私が望むことを行いますが、Win32 の代わりに Unix スタイルのパスを使用してそれを返します。

パスを変換するモジュール、または最初に使用するより良いモジュールはありますか?

4

4 に答える 4

13

File::Specrel2absから使用します。ただし、注意が必要です。これはから呼び出される可能性があり、現在のドライブの現在の作業ディレクトリが必要であると想定されます。ファイルが他のドライブにある場合は、自分で修正するか、2 番目の引数を指定してベース パスを設定する必要があります。getdcwdCwd

于 2009-10-06T20:01:23.260 に答える
4
use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
于 2009-10-06T19:59:49.453 に答える
-1

私はCwdのabs_pathを使用し、次に正規表現を使用して、本当に必要なときにスラッシュを変換します。しかし、ほとんどの用途で、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

しかし、その後..マップされたドライブ参照の有無にかかわらず、私は多くのネットワークパスを使用します。あなたのマイレージは異なる場合があります。

于 2009-10-06T20:40:14.197 に答える
-1
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;

print "FOO: $foo\n";
于 2009-10-06T20:00:17.347 に答える