2010-05-24 12 views
14

In caso di Java, si può ottenere il separatore di percorso utilizzandoCome posso ottenere il separatore di directory (percorso file) in Perl?

System.getProperty("path.separator"); 

C'è un modo simile a Perl? Tutto quello che voglio fare è trovare una dir, una sottodirectory immediata. Dire che mi vengono dati due argomenti $a e $b; Sto suddividendo il primo in base al separatore del percorso e aggiungendolo nuovamente tranne l'ultimo frammento e confrontandolo con il secondo argomento.

Il problema è che il mio codice deve essere generico e per questo ho bisogno di sapere qual è il separatore di percorso dipendente dal sistema?

+1

Hai visto altre domande? http://stackoverflow.com/questions/2859015/why-dont-my-perl-regexes-correctly-extract-a-filename-from-a-path, http://stackoverflow.com/questions/1818093/how- can-i-construct-os-independent-file-percorsi-in-perl – Zaid

+5

Per il vantaggio dei motori di ricerca: questa domanda e le risposte in realtà riguardano il separatore di directory (solitamente barra o barra rovesciata). Il separatore di percorso è una cosa diversa (di solito due punti o punto e virgola) con uno scopo diverso e viene restituita da 'use Config; $ Config {} path_sep '. – daxim

+0

@daxim - Ho modificato il titolo, spero che sia meno ambiguo ora – DVK

risposta

3

La risposta accettata risolve il vero problema, ma se si davvero vuole ottenere il separatore (utilizzando moduli di base solo perl):

my $sep = File::Spec->catfile('', ''); 

Questo unisce due nomi di file vuoti con il separatore di sistema corrente, lasciando solo il separatore.

20

Non si dovrebbe formare i percorsi dei file a mano - invece utilizzare File::Spec modulo:

($volume, $directories,$file) = File::Spec->splitpath($path); 
@dirs = File::Spec->splitdir($directories); 
$path = File::Spec->catdir(@directories); 
$path = File::Spec->catfile(@directories, $filename); 
+0

Non dimenticare splitdir. Un modo più elegante di lavorare con i percorsi è Path :: Class disponibile da CPAN. – Schwern

+0

@Schwern - Non mi sento a mio agio nel consigliare Path :: Class come non l'ho mai usato da solo ... ma ho visto dei consigli altrove altrove su SO, quindi lo controllerò. Buon punto su splitdir - anche se temo che se continuo la risposta si trasformi in copia/incolla del POD :) – DVK

+0

Path :: Class è fantastico, molto più facile da usare rispetto alle alternative. – singingfish

Problemi correlati