2009-06-26 4 views

Antwort

22
use File::Path qw(make_path); 
make_path("path/to/sub/directory"); 

Die veraltete mkpath und bevorzugte make_path ergab sich aus einer Diskussion in Perl 5 Porters fädeln, dass here archiviert wird.

Kurz gesagt, Perl 5.10 Tests ergab Unbeholfenheit in der Argumentanalyse der Schnittstelle makepath(). Also wurde es durch eine einfachere Version ersetzt, die einen Hash als letztes Argument für die Festlegung von Optionen für die Funktion verwendete.

+3

@skiphoppy: Dies ist immer noch nicht "wie UNIX mkdir -p-Befehl" wie in der Frage angegeben. mkdirs Manpage zeigt -p, --parents no error if existing, make parent directories as needed Aber make_path gibt false zurück, wenn das Verzeichnis existiert. (zB make_path "/ tmp/foo" oder sterben; # wird sterben, wenn/tmp/foo existiert) – Randall

3

Verwenden mkpath aus dem Modul File :: Path:

use File::Path qw(mkpath); 
mkpath("path/to/sub/directory"); 
+1

Das gerade jetzt erforschend, sehe ich, dass mkpath() veraltet ist und die offizielle Schnittstelle nun make_path() ist. Wenn jemand eine großartige Erklärung für das, was uns kauft, aufschreibt, werde ich das zur akzeptierten Antwort machen. – skiphoppy

3

Bitte ignorieren, wenn Sie für eine Perl suchen Modul mit ‚mkdir -p‘ Funktionalität, aber der folgende Code funktionieren würde:

my $dir = '/root/example/dir'; 

system ("mkdir -p $dir 2> /dev/null") == 0 
    or die "failed to create $dir. exiting...\n"; 

Sie ein Modul verwenden können, aber dann haben Sie es auf jedem Server auf Sie gehen in den Hafen Code zu installieren. Normalerweise bevorzuge ich Systemfunktion für eine Arbeit wie mkdir, weil es einen geringeren Aufwand zum Importieren und Aufrufen eines Moduls benötigt, wenn ich es nur einmal brauche, um ein Verzeichnis zu erstellen.

+0

Dieser Ansatz macht Sinn, wenn Sie die Installation von Modulen vermeiden wollen. Normalerweise bevorzuge ich die Installation von Modulen, die ich brauche, oder ich lehne es ab, das System zu unterstützen. :) Ich bevorzuge die Verwendung von Modulen, so dass ich die Vorteile der Tests und Untersuchungen nutzen kann, die in sie einflossen. So kann ich Fehler vermeiden, wie zum Beispiel Systemaufrufe nicht zu überprüfen oder Ausgaben von Fehlermeldungen zu verlieren, und weniger Aufwand um einen Prozess zu erstellen. – skiphoppy

+0

Erstellt das keine Abhängigkeit vom Betriebssystem? –

Verwandte Themen