2009-06-26 14 views

risposta

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

Il mkpath deprecato e make_path preferito derivava da una discussione in Perl 5 Porters filo che è archiviato here.

In poche parole, il test di Perl 5.10 ha rivelato l'imbarazzo nell'analisi degli argomenti dell'interfaccia makepath(). Quindi è stato sostituito con una versione più semplice che ha preso un hash come argomento finale per impostare le opzioni per la funzione.

+3

@skiphoppy: questo non è ancora "come il comando mkdir -p di UNIX" come indicato nella domanda. La pagina man di mkdir mostra -p, --parents no error if existing, make parent directories as needed Ma make_path restituirà false se la directory esiste. (cioè, make_path "/ tmp/foo" o die; #will die se esiste/tmp/foo) – Randall

3

Usa mkpath dal modulo File :: Path:

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

Ricercando questo appena ora, vedo che mkpath() è deprecato e l'interfaccia ufficiale è ora make_path(). Se qualcuno scrive una grande spiegazione su ciò che ci compra, farò la risposta accettata. – skiphoppy

3

Gentilmente ignorare se siete alla ricerca di un Perl modulo con funzionalità 'mkdir -p', ma il seguente codice dovrebbe funzionare:

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

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

è possibile utilizzare un modulo, ma poi si deve installarlo su ogni server che si sta per port il codice su. Di solito preferisco usare la funzione di sistema per un lavoro come mkdir perché è un minore sovraccarico da importare e chiamare un modulo quando ne ho bisogno solo una volta per creare una directory.

+0

Questo approccio ha senso se si desidera evitare l'installazione dei moduli. Di solito preferisco richiedere l'installazione di moduli di cui ho bisogno o mi rifiuto di supportare il sistema. :) Preferisco utilizzare i moduli in modo da poter beneficiare dei test e delle ricerche che li riguardano, in modo da evitare errori come il mancato controllo delle chiamate di sistema o la perdita dell'output dei messaggi di errore, e dal fatto che è meno sovraccarico non avere per creare un processo. – skiphoppy

+0

Non crea una dipendenza dal sistema operativo? –

Problemi correlati