Sommario:
- Raccolta di linee univoche
- Eliminazione di più righe vuote
- Stampa di linee da un file in ordine
- Stampa di un intervallo di righe da un file
- Elenco solo dei file in una directory
- Elenco di una directory per dimensione
- Ordinamento di directory per estensione
- Creazione di una calcolatrice semplice
- In Perl, la generazione di numeri casuali è facile, ma la randomizzazione dell'ordine di un array non è così semplice. Tuttavia, è possibile utilizzare la funzione di giunzione per estrarre un elemento casuale da una matrice e quindi posizionare l'elemento in un'altra matrice. Il seguente programma randomizza la lista @MyList:
- Cercare di convincere gli utenti di computer a trovare password che non siano facilmente indovinate è uno dei lavori più impegnativi per un amministratore di sistema. Le persone sembrano sempre insistere nell'usare le loro date di nascita o nomi di animali domestici per le password - infrangere la sicurezza diventa quindi un gioco da ragazzi.
Video: Google Keynote (Google I/O'19) 2024
Alcune persone credono che i programmi brevi non siano validi per molto, ma non è così per Perl. Solo un paio di righe di codice Perl possono fare molto. In questo articolo sono elencati alcuni utili programmi per bambini piccoli e minuscoli.
Raccolta di linee univoche
Se il tuo file di testo ha molte linee che sono duplicate e vuoi vedere solo le linee univoche, puoi raccoglierle in un array (in questo caso, si chiama @Unique) con il seguente programma:
open (IN, "somefile. Txt"); @ Unique = ();
while () {tranne ($ i {$ _} ++) {push (@Unique, $ _)}}
Il trucco qui è che $ i {$ _} ++ restituisce 0 la prima volta crei una coppia chiave-valore con $ _ come chiave e dopo un valore diverso da zero.
Eliminazione di più righe vuote
Alcuni file di testo hanno più righe vuote consecutive che li rendono difficili da leggere, in particolare su schermi piccoli. Il seguente programma stampa un file di testo, comprimendo tutte le istanze di due o più righe vuote in una singola riga vuota.
Nota: Una riga vuota può contenere caratteri di spaziatura, come spazi e tabulazioni, ma nessun carattere visualizzabile.
open (IN, "somefile. Txt"); $ PrevBlank = 0;
while () {
if (/ S / or! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
L'istruzione if nell'esempio precedente è vera se nella riga sono presenti caratteri non vuoti o se la riga precedente non è vuota. L'assegnazione $ PrevBlank ti dice se la riga corrente è vuota, ovvero che ha zero o più caratteri di spazi bianchi e nient'altro.
Stampa di linee da un file in ordine
È facile dimenticare quanto sia utile la funzione di ordinamento di Perl. Il seguente programma legge l'intero file in un array, ordina l'array e stampa il risultato. Breve e dolce, e abbastanza efficiente da avviare:
open (IN, "somefile. Txt");
stampa sort ();
Stampa di un intervallo di righe da un file
Hai mai desiderato leggere solo poche righe da un file e non il tutto? Il seguente programma stampa solo una serie di linee. Si esegue il programma con due argomenti: l'intervallo desiderato e il nome file. Ad esempio, se si nomina il programma "showline" e si desidera vedere le righe da 10 a 20 del file di testo. file txt, si utilizza questa riga di comando:
showline 10-20 somefile. txt
Il seguente programma stampa un intervallo di linee:
open (IN, $ ARGV [1]) o die "Impossibile leggere $ File. n”;
($ Start, $ Stop) = split (/ - /, $ ARGV [0]);
per ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; if ($ i> = $ Start) {print $ Line}}
Elenco solo dei file in una directory
A volte, potresti voler ignorare le sottodirectory in una directory e concentrarti solo sui file.È possibile utilizzare il seguente test del file -f per elencare tutti i file in una directory:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Elenco di una directory per dimensione
Per ordinare, un elenco di directory diverso da quello dei nomi di file, il programma deve conservare un elenco di record costituito dai nomi e da altri elementi nell'elenco. Gli hash sono fantastici da utilizzare per questo tipo di elenco che contiene i record con una chiave (il nome del file) e un valore (le altre informazioni sulla directory). Il seguente programma crea un hash che elenca le dimensioni di ciascun file nella directory e quindi ordina gli elementi per l'output. (Puoi facilmente modificare questo programma per ordinare per data invece che per dimensione.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (ordina {$ i {$ b} <= & gt $ i {$ a}} chiavi% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Ordinamento di directory per estensione
L'ordinamento per porzione di un nome file è un processo leggermente più difficile dell'ordinamento in base alla dimensione del file o alla data in cui il file è stato modificato. Il seguente programma spezza il nome del file in due e tipi dalla seconda parte. Se esegui Perl su un sistema UNIX o Macintosh, questo programma funziona in modo prevedibile solo se i nomi file non hanno periodo o periodo:
foreach $ FullName () {
($ Name, $ Ext) = split (/. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ FullName) = split (/ t /, $ Val);
stampa "$ FullNamen";
}
Creazione di una calcolatrice semplice
Hai mai avuto bisogno di una calcolatrice semplice da utilizzare per eliminare una matematica veloce e sporca? Il seguente programma usa la funzione eval di Perl per stampare le risposte a qualsiasi equazione inserita. Per terminare il programma, inserisci una riga vuota. Ecco il programma per creare la tua calcolatrice:
while () {
$ i = $ _; chomp ($ i); a meno che ($ i) {last}
$ o = eval ($ i); stampa "Rispondi = $ on";
}
Quando si esegue il programma, è possibile immettere qualcosa come la seguente:
((2 ** 8) + (3 ** 8))
e si ottiene questo risultato: > Risposta = 6817
Randomizzazione di una lista
In Perl, la generazione di numeri casuali è facile, ma la randomizzazione dell'ordine di un array non è così semplice. Tuttavia, è possibile utilizzare la funzione di giunzione per estrarre un elemento casuale da una matrice e quindi posizionare l'elemento in un'altra matrice. Il seguente programma randomizza la lista @MyList:
my @TempList = ();
while (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
Il trucco qui è che rand (@MyList) seleziona un numero compreso tra 0 e il numero di elementi in @MyList, e la giuntura cambia questo numero casuale in un numero intero.
Generazione di password mnemoniche casuali
Cercare di convincere gli utenti di computer a trovare password che non siano facilmente indovinate è uno dei lavori più impegnativi per un amministratore di sistema. Le persone sembrano sempre insistere nell'usare le loro date di nascita o nomi di animali domestici per le password - infrangere la sicurezza diventa quindi un gioco da ragazzi.
Il seguente programma genera password casuali. Invece di un miscuglio di lettere difficili da ricordare, tuttavia, le password sono in qualche modo mnemoniche perché appaiono in coppie di consonanti e vocali che sono pronunciabili.Stringendo insieme alcune sillabe che suonano sciocchezze, puoi generare frasi senza senso facili da ricordare.
Ogni sillaba della password può rappresentare uno qualsiasi dei 100 numeri; pertanto, una singola password di quattro sillabe, come
votahubo, è una delle 100 milioni (100 alla quarta potenza) possibili password generate dal programma. L'assegnazione di queste password da parte di un amministratore di sistema offre più sicurezza che consentire agli utenti di scegliere le proprie password facili da indovinare: print "Enter a seed number:"; $ s =;
srand ($ s ^ volta);
@ c = split (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
per ($ i = 1; $ i <= 4; $ i + = 1)
{print $ c [int (rand (20))], $ v [int (rand (5))] }
Le prime due righe di questo programma inizializzano il seme per i numeri casuali e le due righe successive creano elenchi contenenti le 20 consonanti (meno
q ) e 5 vocali dell'alfabeto. Il ciclo for stampa semplicemente le quattro sillabe.