Innehållsförteckning:
- Samla unika rader
- Avlägsna flera tomma linjer
- Skriva ut linjer från en fil i ordnad ordning
- Skriva ut en rad rader från en fil
- Visar bara filerna i en katalog
- Lista en katalog efter storlek
- Sortera kataloger i tillägg
- Skapa en enkel kalkylator
- I Perl är generering av slumptal lätt, men det är inte så enkelt att randomisera ordningen för en array. Ändå kan du använda splitsfunktionen för att dra ett slumpmässigt element från en array och placera sedan elementet i en annan matris. Följande program randomiserar listan @MyList:
- Att försöka övertyga datoranvändare att komma med lösenord som inte enkelt gissas är ett av de mest utmanande jobben för en systemadministratör. Människor verkar alltid insistera på att använda sina födelsedatum eller husdjurs namn för lösenord - brott mot säkerhet blir då barns lek.
Video: How I held my breath for 17 minutes | David Blaine 2024
Vissa tror att korta program inte är bra för mycket, men det är inte så med Perl. Bara ett par rader av Perl-kod kan gå långt. Den här artikeln innehåller några praktiska teeny, små Perl-program.
Samla unika rader
Om din textfil har många rader som är dubbletter och du bara vill se de unika raderna kan du samla dem in i en array (i det här fallet kallas den @Unique) med följande program:
öppen (IN, "somefile. Txt"); @ Unique = ();
medan () {med mindre ($ i {$ _} ++) {push (@Unique, $ _)}}
Tricket här är att $ i {$ _} ++ returnerar 0 första gången du skapar ett nyckelvärdespar med $ _ som nyckeln, och en del icke-nollvärde efter det.
Avlägsna flera tomma linjer
Vissa textfiler har flera tomma linjer i följd, vilket gör att de är svåra att läsa, särskilt på små skärmar. Följande program skriver ut en textfil, komprimerar alla instanser av två eller flera tomma linjer i en enda tomlinje.
Obs: En tom linje kan ha blanksteg i den, till exempel mellanslag och flikar, men inga tecken som kan visas.
öppen (IN, "somefile. Txt"); $ PrevBlank = 0;
medan () {
om (/ S / eller! $ PrevBlank) {skriv ut $ _}
$ PrevBlank = / ^ s * $ /;
}
Om förklaringen i det föregående exemplet är sant om det inte finns blanka tecken på linjen eller om den föregående raden inte var blank. $ PrevBlank-uppgiften berättar om den aktuella raden är tom, vilket betyder att den har noll eller fler blankstegstegn och inget annat.
Skriva ut linjer från en fil i ordnad ordning
Det är lätt att glömma hur användbar Perl sortsfunktion är. Följande program läser hela filen i en array, sorterar arrayen och skriver resultatet. Kort och söt och ganska effektiv att starta:
öppen (IN, "somefile. Txt");
Skriv sortera ();
Skriva ut en rad rader från en fil
Har du någonsin velat läsa några få rader från en fil, och inte hela grejen? Följande program skriver ut en rad rader. Du kör programmet med två argument: det intervall du vill ha och filnamnet. Till exempel, om du heter ditt program "showline" och du vill se linjer 10 till 20 i partfältet. txt-fil, använder du den här kommandoraden:
showline 10-20 somefile. txt
Följande program skriver ut en rad rader:
öppen (IN, $ ARGV [1]) eller dö "Kunde inte läsa $ File. n”;
($ Start, $ Stop) = delad (/ - /, $ ARGV [0]);
för ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; om ($ i> = $ Start) {skriv ut $ Line}}
Visar bara filerna i en katalog
Ibland kanske du ignorerar underkatalogerna i en katalog och fokuserar bara på filerna.Du kan använda följande -f filtest för att lista alla filer i en katalog:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Lista en katalog efter storlek
För att sortera en kataloglista med något annat än filnamnen måste ditt program behålla en lista över poster som består av namn och andra objekt i listan. Hashes är bra att använda för den här typen av listor som har poster med en nyckel (filnamnet) och ett värde (den andra kataloginformationen). Följande program skapar en hash som listar storleken på varje fil i katalogen och sorterar sedan objekten för utmatning. (Du kan enkelt ändra detta program för att sortera efter datum istället för efter storlek.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (sort {$ i {$ b} <= & gt $ i {$ a}} nycklar% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Sortera kataloger i tillägg
Sortera efter en del av ett filnamn är en något svårare process än sortering efter filstorlek eller vid det datum då filen ändrades. Följande program bryter filnamnet i två och sorterar av den andra delen. Om du kör Perl på ett UNIX- eller Macintosh-system fungerar det här programmet endast förutsägbart om filnamnen inte har någon period eller en period:
foreach $ FullName () {
($ Namn, $ Ext) = delad /. /, $ FullName, 2);
tryck (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sortera (@ Temp)) {
($ Ext, $ FullName) = delat (/ t /, $ Val);
skriv ut "$ FullNamen";
}
Skapa en enkel kalkylator
Har du någonsin behövt en enkel att använda kalkylator för att släcka lite snabb och smutsig matte? Följande program använder Perls eval-funktion för att skriva ut svaren på alla ekvationer du anger. För att avsluta programmet, ange en tom linje. Här är det programmet för att skapa din egen kalkylator:
medan () {
$ i = $ _; chomp ($ i); såvida inte ($ i) {sista}
$ o = eval ($ i); skriv ut "Answer = $ on";
}
När du kör programmet kan du ange något som följande:
(2 ** 8) + (3 ** 8))
och du får detta resultat: > Svar = 6817
Randomizing a list
I Perl är generering av slumptal lätt, men det är inte så enkelt att randomisera ordningen för en array. Ändå kan du använda splitsfunktionen för att dra ett slumpmässigt element från en array och placera sedan elementet i en annan matris. Följande program randomiserar listan @MyList:
min @TempList = ();
medan (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
Tricket här är att rand (@MyList) väljer ett tal mellan 0 och antalet element i @MyList, och splice ändrar detta slumptal till ett heltal.
Generera slumpmässiga mnemoniska lösenord
Att försöka övertyga datoranvändare att komma med lösenord som inte enkelt gissas är ett av de mest utmanande jobben för en systemadministratör. Människor verkar alltid insistera på att använda sina födelsedatum eller husdjurs namn för lösenord - brott mot säkerhet blir då barns lek.
Följande program genererar slumpmässiga lösenord. Istället för en jumble av svåra att komma ihåg bokstäver, är lösenordet dock lite mnemonic eftersom de förekommer i par av konsonanter och vokaler som är uttalbara.Genom att stränga ihop en del goofy-sounding stavelser, kan du skapa lättanvända nonsensfraser.
Varje stavelse av lösenordet kan representera någon av 100 nummer; därför är ett enkelt lösenord med fyra stavelser, till exempel
votahubo, ett av 100 miljoner (100 till fjärde kraften) möjliga lösenord som programmet genererar. Att ha en systemadministratör tilldela dessa lösenord ger mer säkerhet än att låta användarna välja sina egna, lätt gissade lösenord: Skriv ut "Ange ett frönummer:"; $ s =;
srand ($ s ^ tid);
@ c = split (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
för ($ i = 1; $ i <= 4; $ i + = 1)
{skriv ut $ c [int (rand (20))], $ v [int }
De två första raderna i detta program initierar fröet för slumptalsnumren, och de följande två raderna skapar listor som innehåller de 20 konsonanterna (minus
q ) och 5 vokaler i alfabetet. För loop sätter du bara ut de fyra stavelserna.