私はPerlスクリプトの中でファイルパスを構築する必要があります。 WindowsとUnixの両方でスクリプトを動作させるにはどのパス区切り文字を使用しますか?オプションのWindowsドライブ文字を含め、PerlでOSに依存しないファイルパスを構築するにはどうすればよいですか?
Windowsにはドライブ文字が必要です。
私はPerlスクリプトの中でファイルパスを構築する必要があります。 WindowsとUnixの両方でスクリプトを動作させるにはどのパス区切り文字を使用しますか?オプションのWindowsドライブ文字を含め、PerlでOSに依存しないファイルパスを構築するにはどうすればよいですか?
Windowsにはドライブ文字が必要です。
あなたはFile::Specのcatpath
をしたい:
catpath() Takes volume, directory and file portions and returns an entire path. Under Unix, $volume is ignored, and directory and file are concatenated. A '/' is inserted if need be. On other OSes, $volume is significant. $full_path = File::Spec->catpath($volume, $directory, $file);
Q:WindowsとUnixの両方でスクリプトを動作させるにはどのパス区切り文字を使用しますか?
A:
Explanation: Windows can work similarly to Unix with/as path separator. (Mac OS uses : as a path separator instead of /). The File::Spec modules can also help. use File::Spec::Functions; chdir(updir()); # go up one directory $file = catfile(curdir(), 'temp', 'file.txt'); # on Unix and Win32, './temp/file.txt' # on Mac OS, ':temp:file.txt' # on VMS, '[.temp]file.txt' Source: http://www.xav.com/perl/lib/Pod/perlport.html
パス区切り記号を使用して、ディレクトリ/ファイル名のコンポーネント間の文字を意味するように思えます。しかし、あなたが別の意味を持っている場合にのみ:
特に、MANPATHやPERL5LIBのような環境変数は、パス区切り文字で区切られたファイル名またはディレクトリ名のリストをとります。 PerlのConfigモジュールは、$ Config :: Config {'path_sep'}のような文字を移植可能です。
私がそうであるようにあなたは、ファイル::スペック面倒を見つけた場合は、Path::Classを試してみてください。これは、あなたが長い文字列のFile :: Specクラスメソッドを文字列で呼び出す必要はなく、ディレクトリとファイルオブジェクトを扱えるようにします。
いいえ、perlは/ VMSを除いて変換しません。おそらくそれを使用し、ほとんどのWindows Cライブラリ呼び出しで正常に動作します。 – ysth
あなたのソースは間違っていて、完全に間違っています。 –
@ysth、/はWindowsではうまく動作しますが、\によって問題が発生することがあります。私の答えはポイントだと思っていましたが、それは下落して困ってしまったので、私は自分の答えを支持していました。コメントありがとう。 Perlが変換するかどうかにかかわらず、私はOPの質問を誤解している可能性があります。 – Mike