Come cercare un file in Perl

April 14

Perl è dotato di un modulo File :: Find che consente all'utente di cercare un file. Il File :: Find :: trovare la funzione scende in sottodirectory e visite ogni file di una volta, passando ad una funzione che fornisci. Dal momento che Perl è un linguaggio di programmazione multi-piattaforma, la funzione può essere utilizzata su molti sistemi operativi diversi.

istruzione

1 Importare il modulo "File :: Find" utilizzando il "Usa" parola chiave. Tutte le distribuzioni Perl dovrebbero venire con il modulo "File :: Find", quindi non è necessario installare separatamente:
"use File::Find;"

2 Scrivere una funzione di filtro in quanto la funzione "File :: Find :: trovare" in realtà non fa alcun filtraggio. Creare una funzione di filtraggio che memorizza i file in un elenco, li stampa, li elimina, li muove o fa qualsiasi altra cosa si vuole fare con i file. La funzione di filtro non ha argomenti, e il nome del file attualmente visitato da File :: Find :: trovare sarà nella variabile di default

$. In questo esempio, la funzione di filtro filtra file basandosi sulla loro nome di file e una espressione regolare:
"sub filter {
if($
"sub filter {
if($
= ~ /.html$/i) {
print "$ _ \ n";
}
} "

3 Chiamare la funzione "File :: Find :: trovare", dal momento che il "Usa" parola chiave importata tutte le funzioni di File :: Find nel namespace globale. La funzione "Trova" prende due argomenti. Il primo è un riferimento alla funzione di filtro, la sintassi che sembra un po 'strano.

4 Creare un riferimento alla funzione "filtro" utilizzando il codice "\&filter" . La barra rovesciata è l'operatore di riferimento, il che significa che farà un riferimento di tutto ciò che è passato a esso. Di solito omesso, la & è la funzione o subroutine prefisso, usato per indicare le funzioni. E 'utilizzato solo da $ è per scalari, @ per le liste e "%" per gli hash.

5 Utilizzare il secondo parametro per trovare la directory di base per la ricerca. Questo dovrebbe essere sia un percorso assoluto o la directory corrente, indicato con un ".".
"find(\&filter, ".");"

6 Passare una subroutine anonima invece di un riferimento alla funzione. La parola chiave "sub" fa una subroutine anonima e restituisce un riferimento ad esso, che è utile per una funzione come File :: Find :: trovare se la funzione desiderata è molto breve. Si mantiene tutto il codice in un unico luogo, in modo che il lettore del codice non deve cercare la funzione di filtro. Questo esempio basta stampare tutti i file trovati, con nessun filtro regex:
"find(sub {print "$_\n";}, ".");"

Consigli e avvertenze

  • Non usare la parola "sub" se devi chiamare File :: Find :: trovare da più luoghi, in quanto non tiene conto per la ripetizione del codice.