Slik søker du etter en fil i Perl

Perl kommer med en fil :: Finn modul som lar brukeren søke etter en fil. File :: Finn :: finne funksjon går ned i underkataloger og besøk hver fil en gang, den sendes til en funksjon du oppgir. Siden Perl er et kryssplattform programmeringsspråk, kan funksjonen brukes på mange forskjellige operativsystemer.

Bruksanvisning

1 Importer "File :: Finn" modul ved å bruke "Bruk" søkeord. Alle Perl distribusjoner bør komme med på "File :: Finn" modul, så det er ikke nødvendig å installere den separat:
"use File::Find;"

2 Skriv en filterfunksjon siden "File :: Finn :: finne" -funksjonen faktisk ikke gjøre noe filtrering. Lag en filtreringsfunksjon som lagrer filene i en liste, skriver dem, sletter dem, flytter dem eller gjør noe annet du ønsker å gjøre med filene. Filterfunksjonen tar ingen argumenter, og navnet på filen for tiden besøk av File :: Finn :: finne vil være i standard variabel

$. I dette eksempel er filterfunksjonen filtrerer filer basert på deres filnavn og en regulært uttrykk:
"sub filter {
if($
"sub filter {
if($
= ~ /.html$/i) {
print "$ _ \ n";
}
} "

3 Ring "File :: Finn :: finne" -funksjonen, siden "Bruk" søkeord importert alle funksjonene fra File :: Finn i den globale navnerommet. "Finn" funksjonen tar to argumenter. Den første er en referanse til filterfunksjonen, syntaksen som ser litt rart.

4 Lag en referanse til "Filter" funksjonen ved å bruke koden "\&filter" . Den backslash er referansen operatør, noe som betyr at det vil gjøre en henvisning ut av hva er gått til det. Vanligvis er utelatt, og det er funksjonen eller subrutinen prefiks, brukes for å betegne funksjoner. Den brukes på samme måte som $ er for skalarer, @ for lister og "%" for hashes.

5 Bruk den andre parameteren for å finne basekatalogen for å søke. Dette bør enten være en absolutt sti eller nåværende katalog, merket med en ".".
"find(\&filter, ".");"

6 Passere en anonym subrutine i stedet for en funksjon referanse. Den "sub" søkeord gjør en anonym subrutine og returnerer en referanse til det, noe som er nyttig for en funksjon som File :: Finn :: finne hvis den funksjonen du ønsker er veldig kort. Det holder all koden på ett sted, slik at leseren av koden ikke behøver å søke etter filterfunksjonen. Dette eksemplet vil bare skrive ut alle filer som er funnet, uten regex filter:
"find(sub {print "$_\n";}, ".");"

Hint

  • Ikke bruk "sub" søkeord hvis du må ringe File :: Finn :: finne fra flere steder, så det ikke høyde for kode repetisjon.