2009-11-30 3 views

Antwort

12

Sie wollen File::Spec ‚s 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); 
-6

F: Welchen Pfadtrenner sollte ich verwenden, damit mein Skript unter Windows und Unix funktioniert?

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

Nein, Perl konvertiert nicht/(außer auf VMS, vielleicht?) - Es verwendet es einfach, und es funktioniert gut in den meisten Windows C-Bibliotheksaufrufen. – ysth

+2

Ihre Quelle ist fehlgeleitet und völlig falsch. –

+0

@ysth, Das/funktioniert immer gut auf meinem Windows, während \ manchmal Probleme verursacht. Ich dachte, meine Antwort war auf den Punkt, aber es wurde abgelehnt, so dass ich verwirrt werde und ich versuchte, Unterstützung für meine Antwort zu finden. Danke für den Kommentar. Ob Perl konvertiert oder nicht, es ist möglich, dass ich die Frage des OP falsch verstehe. – Mike

8

Sie wollen File::Spec. Es gibt spezifische Versionen für Unix, Win32 und MacOS sowie others.

+6

Sie verwenden die plattformspezifischen Versionen nicht direkt. Sie brauchen nur Datei :: Spec. Es stellt den Rest für dich fest. –

+0

Ich stimme zu, dass Sie die spezifischen Versionen nicht verwenden sollten, weshalb meine Antwort nur File :: Spec mit ein wenig zusätzlichen Informationen war. – s1n

2

Es klingt, als ob Sie Pfadtrennzeichen verwenden, um das Zeichen zwischen Verzeichnis/Dateinamen-Komponenten zu bedeuten. Aber nur für den Fall, dass Sie die andere Bedeutung meinten:

Einige Dinge (insbesondere Umgebungsvariablen wie MANPATH oder PERL5LIB) nehmen eine Liste von Datei- oder Verzeichnisnamen, getrennt durch ein Pfadtrennzeichen. Perls Config-Modul liefert portabel ein solches Zeichen wie $ Config :: Config {'path_sep'}.

5

Wenn Sie File :: Spec umständlich zu finden, wie ich, versuchen Path::Class. Es gibt Ihnen Verzeichnis- und Dateiobjekte, mit denen Sie arbeiten müssen, anstatt langwichtige File :: Spec-Klassenmethoden für Strings aufrufen zu müssen.

Verwandte Themen