2009-11-30 3 views

答えて

12

あなたはFile::Speccatpathをしたい:

 
     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); 
-6

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 
+2

いいえ、perlは/ VMSを除いて変換しません。おそらくそれを使用し、ほとんどのWindows Cライブラリ呼び出しで正常に動作します。 – ysth

+2

あなたのソースは間違っていて、完全に間違っています。 –

+0

@ysth、/はWindowsではうまく動作しますが、\によって問題が発生することがあります。私の答えはポイントだと思っていましたが、それは下落して困ってしまったので、私は自分の答えを支持していました。コメントありがとう。 Perlが変換するかどうかにかかわらず、私はOPの質問を誤解している可能性があります。 – Mike

8

希望するFile::Specです。 UnixWin32、およびMacOSの特定のバージョンがあります。othersもあります。

+6

プラットフォーム固有のバージョンを直接使用することはありません。 File :: Specが必要です。それはあなたのために残りの部分を把握します。 –

+0

特定のバージョンを使用してはならないことに私は同意します。そのため、私の答えはFile :: Specであり、ちょっとした情報が追加されています。 – s1n

2

パス区切り記号を使用して、ディレクトリ/ファイル名のコンポーネント間の文字を意味するように思えます。しかし、あなたが別の意味を持っている場合にのみ:

特に、MANPATHやPERL5LIBのような環境変数は、パス区切り文字で区切られたファイル名またはディレクトリ名のリストをとります。 PerlのConfigモジュールは、$ Config :: Config {'path_sep'}のような文字を移植可能です。

5

私がそうであるようにあなたは、ファイル::スペック面倒を見つけた場合は、Path::Classを試してみてください。これは、あなたが長い文字列のFile :: Specクラスメソッドを文字列で呼び出す必要はなく、ディレクトリとファイルオブジェクトを扱えるようにします。

関連する問題