Indholdsfortegnelse:
- Indsamling af unikke linjer
- Fjernelse af flere blanke linjer
- Udskrivningslinjer fra en fil i rækkefølge
- Udskrivning af en række linjer fra en fil
- Viser kun filerne i en mappe
- Angivelse af en mappe efter størrelse
- Sortering af biblioteker efter udvidelse
- Oprettelse af en simpel kalkulator
- I Perl er det nemt at generere tilfældige tal, men at randomisere rækkefølgen af en matrix er ikke så simpelt. Ikke desto mindre kan du bruge splejsningsfunktionen til at trække et tilfældigt element fra et array og derefter placere elementet i et andet array. Følgende program randomiserer listen @MyList:
- Forsøg at overbevise computerbrugere om at komme op med adgangskoder, der ikke let gættes, er et af de mest udfordrende job for en systemadministrator. Folk synes altid at insistere på at bruge deres fødselsdatoer eller kæledyrs navne til adgangskoder - brud på sikkerhed bliver så barns lege.
Video: Technology Stacks - Computer Science for Business Leaders 2016 2025
Nogle mener, at korte programmer ikke er gode for meget, men det er ikke sådan med Perl. Bare et par linjer af Perl-kode kan gå langt. Denne artikel indeholder nogle handy teeny, små Perl programmer.
Indsamling af unikke linjer
Hvis din tekstfil har mange linjer, der er dubletter, og du kun vil se de unikke linjer, kan du samle dem ind i en matrix (i dette tilfælde kaldes det @Unique) med følgende program:
åben (IN, "somefile. Txt"); @ Unique = ();
mens () {medmindre ($ i {$ _} ++) {push (@Unique, $ _)}}
Tricket her er, at $ i {$ _} ++ returnerer 0 første gang du opretter et nøgleværdipar med $ _ som nøglen og nogle ikke-nulværdier efter det.
Fjernelse af flere blanke linjer
Nogle tekstfiler har flere blanke linjer i hinanden, hvilket gør dem vanskelige at læse, især på små skærme. Følgende program udskriver en tekstfil, der komprimerer alle forekomster af to eller flere tomme linjer i en enkelt tom linje.
Bemærk: En tom linje kan have hvide rums tegn i den, som f.eks. Mellemrum og faner, men ingen tegn, der kan vises.
åben (IN, "somefile. Txt"); $ PrevBlank = 0;
mens () {
hvis (/ S / eller! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
If-sætningen i det foregående eksempel er sandt, hvis der ikke er blanke tegn på linjen, eller hvis den forrige linje ikke var blank. $ PrevBlank-opgaven fortæller dig, om den nuværende linje er tom, hvilket betyder at den har nul eller flere hvide rumtegn og intet andet.
Udskrivningslinjer fra en fil i rækkefølge
Det er nemt at glemme, hvor nyttigt Perls sorteringsfunktion er. Følgende program læser hele filen i en matrix, sorterer arrayet og udskriver resultatet. Kort og sød, og ret effektiv at starte:
åben (IN, "somefile. Txt");
print sorter ();
Udskrivning af en række linjer fra en fil
Har du nogensinde ønsket at læse nogle få linjer fra en fil, og ikke det hele? Følgende program udskriver kun en række linjer. Du kører programmet med to argumenter: det ønskede interval og filnavnet. For eksempel, hvis du navngiver dit program "showline", og du vil se linjer 10 til 20 i partfilen. txt fil, bruger du denne kommandolinje:
showline 10-20 somefile. txt
Følgende program udskriver en række linjer:
åben (IN, $ ARGV [1]) eller dø "Kunne ikke læse $ File. n”;
($ Start, $ Stop) = delt (/ - /, $ ARGV [0]);
for ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; hvis ($ i> = $ Start) {print $ Line}}
Viser kun filerne i en mappe
Sommetider kan du ignorere underkatalogerne i en mappe og kun fokusere på filerne.Du kan bruge følgende -f filtest til at liste alle filer i en mappe:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Angivelse af en mappe efter størrelse
For at sortere en mappe med andre end dets filnavne, skal dit program beholde en liste over poster, der består af navne og andre elementer i noteringen. Hashes er gode til at bruge til denne slags liste, der har optegnelser med en nøgle (filnavnet) og en værdi (den anden mappeinformation). Følgende program opretter en hash, der angiver størrelsen af hver fil i mappen og sorterer derefter elementerne til output. (Du kan nemt ændre dette program for at sortere efter dato i stedet for efter størrelse.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (sort {$ i {$ b} <= & gt $ i {$ a}} nøgler% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Sortering af biblioteker efter udvidelse
Sortering af en del af et filnavn er en lidt vanskeligere proces end sortering efter filstørrelse eller den dato, filen blev ændret. Følgende program bryder filnavnet i to og sorterer af den anden del. Hvis du kører Perl på et UNIX- eller Macintosh-system, fungerer dette program kun forudsigeligt, hvis filnavnet ikke har nogen periode eller en periode:
foreach $ FullName () {
($ Navn, $ Ext) = delt /. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ FullName) = split (/ t /, $ Val);
Udskriv "$ FullNamen";
}
Oprettelse af en simpel kalkulator
Har du brug for en brugervenlig kalkulator til at slukke for en hurtig og snavset matematik? Følgende program bruger Perls eval-funktion til at udskrive svarene på en ligning, du indtaster. For at afslutte programmet skal du indtaste en tom linje. Her er det program til at oprette din egen regnemaskine:
mens () {
$ i = $ _; Chomp ($ i); medmindre ($ i) {sidste}
$ o = eval ($ i); print "Answer = $ on";
}
Når du kører programmet, kan du indtaste noget som følgende:
((2 ** 8) + (3 ** 8))
og du får dette resultat: > Svar = 6817
Randomizing en liste
I Perl er det nemt at generere tilfældige tal, men at randomisere rækkefølgen af en matrix er ikke så simpelt. Ikke desto mindre kan du bruge splejsningsfunktionen til at trække et tilfældigt element fra et array og derefter placere elementet i et andet array. Følgende program randomiserer listen @MyList:
my @TempList = ();
mens (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
Tricket her er, at rand (@MyList) vælger et tal mellem 0 og antallet af elementer i @MyList, og splice ændrer dette tilfældige tal til et helt tal.
Generering af tilfældige mnemoniske adgangskoder
Forsøg at overbevise computerbrugere om at komme op med adgangskoder, der ikke let gættes, er et af de mest udfordrende job for en systemadministrator. Folk synes altid at insistere på at bruge deres fødselsdatoer eller kæledyrs navne til adgangskoder - brud på sikkerhed bliver så barns lege.
Følgende program genererer tilfældige adgangskoder. I stedet for en skamplet af svære at huske bogstaver, er passwordsne dog noget mnemoniske fordi de forekommer i par af konsonanter og vokaler, der kan udtages.Ved at sammenføje et par guffe-lydende stavelser, kan du generere let-at-huske nonsens sætninger.
Hver stavelse af adgangskoden kan repræsentere en af 100 numre; Derfor er et enkelt fire stavelsesadgangskode, som f.eks.
votahubo, en af 100 millioner (100 til den fjerde strøm) mulige adgangskoder, programmet genererer. At have en systemadministrator tildele disse adgangskoder giver mere sikkerhed end at lade brugerne vælge deres egne, let gættede adgangskoder: print "Indtast et frø nummer:"; $ s =;
srand ($ s ^ tid);
@ c = split (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
for ($ i = 1; $ i <= 4; $ i + = 1)
{udskriv $ c [int (rand (20))], $ v [int (rand (5))] }
De to første linjer i dette program initialiserer frøet for tilfældige tal, og de næste to linjer opretter lister der indeholder de 20 konsonanter (minus
q ) og 5 vokaler i alfabetet. Forløbet udskriver simpelthen de fire stavelser.