Innholdsfortegnelse:
- Samle unike linjer
- Bli kvitt flere tomme linjer
- Skrive ut linjer fra en fil i rekkefølge
- Skrive ut en rekke linjer fra en fil
- Viser bare filene i en katalog
- Oppgi en katalog etter størrelse
- Sortering av kataloger etter utvidelse
- Opprette en enkel kalkulator
- I Perl er generering av tilfeldige tall lett, men det er ikke så enkelt å randomisere rekkefølgen på en matrise. Likevel kan du bruke splitsingsfunksjonen til å trekke et tilfeldig element fra en matrise og deretter plassere elementet i en annen matrise. Følgende program randomiserer listen @MyList:
- Forsøk på å overbevise datamaskinbrukere om å komme opp med passord som ikke lett gjettes, er en av de mest utfordrende jobbene for en systemadministrator. Folk ser alltid ut til å insistere på å bruke fødselsdatoer eller kjæledyrs navn for passord - brudd på sikkerhet blir da barns lek.
Video: Technology Stacks - Computer Science for Business Leaders 2016 2025
Noen tror at korte programmer ikke er bra for veldig mye, men det er ikke så med Perl. Bare et par linjer med Perl-kode kan gå langt. Denne artikkelen viser noen praktiske teeny, små Perl programmer.
Samle unike linjer
Hvis tekstfilen din har mange linjer som er duplikater, og du bare vil se de unike linjene, kan du samle dem inn i en matrise (i dette tilfellet kalles den @Unique) med følgende program:
åpen (IN, "somefile. Txt"); @ Unique = ();
mens () {med mindre ($ i {$ _} ++) {push (@Unique, $ _)}}
Trikset her er at $ i {$ _} ++ returnerer 0 første gang du lager et nøkkelverdi-par med $ _ som nøkkel, og noen ikke-nullverdier etter det.
Bli kvitt flere tomme linjer
Noen tekstfiler har flere, sammenhengende tomme linjer, noe som gjør dem vanskelige å lese, spesielt på små skjermer. Følgende program skriver ut en tekstfil, komprimerer alle forekomster av to eller flere tomme linjer i en enkelt tom linje.
Merk: En tom linje kan ha hvite mellomrom i den, for eksempel mellomrom og faner, men ingen displaybare tegn.
åpen (IN, "somefile. Txt"); $ PrevBlank = 0;
mens () {
hvis (/ S / eller! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
If-setningen i det foregående eksemplet er sant hvis det er ikke-blanke tegn på linjen, eller hvis den forrige linjen ikke var blank. $ PrevBlank-oppdraget forteller om den nåværende linjen er tom, noe som betyr at den har null eller flere hvite mellomrom og ingenting annet.
Skrive ut linjer fra en fil i rekkefølge
Det er lett å glemme hvor nyttig Perls sorteringsfunksjon er. Følgende program leser hele filen inn i en matrise, sorterer matrisen og skriver resultatet. Kort og søt, og ganske effektiv å starte:
åpen (IN, "somefile. Txt");
skrive sortering ();
Skrive ut en rekke linjer fra en fil
Har du noen gang ønsket å lese bare noen få linjer fra en fil, og ikke hele greia? Følgende program skriver ut bare en rekke linjer. Du kjører programmet med to argumenter: rekkevidden du vil ha og filnavnet. For eksempel, hvis du heter programmet "showline", og du vil se linjer 10 til 20 av elementet. txt fil, bruker du denne kommandolinjen:
showline 10-20 somefile. txt
Følgende program skriver ut en rekke linjer:
åpen (IN, $ ARGV [1]) eller dør "Kunne ikke lese $ File. n”;
($ Start, $ Stopp) = delt (/ - /, $ ARGV [0]);
for ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; hvis ($ i> = $ Start) {print $ Line}}
Viser bare filene i en katalog
Noen ganger kan du ignorere underkatalogene i en katalog og bare fokusere på filene.Du kan bruke følgende filtest for å liste alle filene i en katalog:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Oppgi en katalog etter størrelse
For å sortere en katalogoppføring av noe annet enn filnavnet, må programmet holde en liste over poster som består av navnene og andre elementer i oppføringen. Hashes er flott å bruke for denne typen liste som har poster med en nøkkel (filnavnet) og en verdi (den andre kataloginformasjonen). Følgende program oppretter en hash som viser størrelsen på hver fil i katalogen, og sorterer deretter elementene for utdata. (Du kan enkelt endre dette programmet for å sortere etter dato i stedet for etter størrelse.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (sort {$ i {$ b} <= & gt $ i {$ a}} nøkler% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Sortering av kataloger etter utvidelse
Sortering av en del av filnavn er en litt vanskeligere prosess enn sortering etter filstørrelse eller ved datoen filen ble endret. Følgende program bryter filnavnet til to og sorterer av den andre delen. Hvis du kjører Perl på et UNIX- eller Macintosh-system, virker dette programmet kun forutsigbart hvis filnavnene ikke har noen periode eller en periode:
foreach $ FullName () {
($ Navn, $ Ext) = delt /. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ FullName) = delt (/ t /, $ Val);
skriv ut "$ FullNamen";
}
Opprette en enkel kalkulator
Har du noen gang hatt en brukervennlig kalkulator for å slå av en rask og skitten matte? Følgende program bruker Perls eval-funksjon for å skrive ut svarene til en ligning du skriver inn. For å avslutte programmet, skriv inn en tom linje. Her er det programmet for å lage din egen kalkulator:
mens () {
$ i = $ _; chomp ($ i); med mindre ($ i) {siste}
$ o = eval ($ i); skriv ut "Svar = $ på";
}
Når du kjører programmet, kan du skrive inn noe som følger:
(2 ** 8) + (3 ** 8))
og du får dette resultatet: > Svar = 6817
Randomizing en liste
I Perl er generering av tilfeldige tall lett, men det er ikke så enkelt å randomisere rekkefølgen på en matrise. Likevel kan du bruke splitsingsfunksjonen til å trekke et tilfeldig element fra en matrise og deretter plassere elementet i en annen matrise. Følgende program randomiserer listen @MyList:
min @TempList = ();
mens (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
Trikset her er at rand (@MyList) velger et tall mellom 0 og antall elementer i @MyList, og splice endrer dette tilfeldige tallet til et heltall.
Generere tilfeldige mnemoniske passord
Forsøk på å overbevise datamaskinbrukere om å komme opp med passord som ikke lett gjettes, er en av de mest utfordrende jobbene for en systemadministrator. Folk ser alltid ut til å insistere på å bruke fødselsdatoer eller kjæledyrs navn for passord - brudd på sikkerhet blir da barns lek.
Følgende program genererer tilfeldige passord. Istedenfor en jumble av vanskelig å huske bokstaver, er passordene imidlertid litt mnemonic fordi de vises i par konsonanter og vokaler som er uttalt.Ved å stryke sammen noen gule lydende stavelser, kan du generere enkle å huske nonsensfraser.
Hver stavelse av passordet kan representere en av 100 tall; Derfor er et enkelt fire stavelsespassord, som
votahubo, en av 100 millioner (100 til fjerde kraft) mulige passord som programmet genererer. Å ha en systemadministrator tilordne disse passordene gir mer sikkerhet enn å la brukerne velge sine egne, lett gjette passord: print "Skriv inn et frø nummer:"; $ s =;
srand ($ s ^ tid);
@ c = delt (/ * /, "bcdfghjklmnprstvwxyz");
@ v = delt (/ * /, "aeiou");
for ($ i = 1; $ i <= 4; $ i + = 1)
{skriv ut $ c [int (rand (20))], $ v [int }
De to første linjene i dette programmet initialiserer frøet for tilfeldige tall, og de neste to linjene lager lister som inneholder de 20 konsonanter (minus
q ) og 5 vokaler i alfabetet. For-sløyfen skriver bare de fire stavelsene.
