Inhoudsopgave:
- Unieke regels verzamelen
- Meerdere lege regels verwijderen
- Lijnen uit een bestand in gesorteerde volgorde afdrukken
- Een reeks lijnen afdrukken vanuit een bestand
- Alleen de bestanden in een map vermelden
- Een map op grootte weergeven
- Sorteren van mappen op extensie
- Een eenvoudige rekenmachine maken
- In Perl is het genereren van willekeurige getallen eenvoudig, maar het willekeurig rangschikken van de volgorde van een array is niet zo eenvoudig. Niettemin kunt u de splice-functie gebruiken om een willekeurig element uit een array te trekken en het element vervolgens in een andere array te plaatsen. Het volgende programma maakt de lijst willekeurig @ MijnLijst:
- Probeert de computergebruikers over te halen om wachtwoorden te maken die niet gemakkelijk te raden zijn, is een van de meest uitdagende taken voor een systeembeheerder. Mensen lijken altijd erop te staan hun geboortedata of huisdierennamen te gebruiken voor wachtwoorden - beveiliging wordt dan kinderspel.
Video: Somfy rolluiken afstellen/instellen? Instructies. 2024
Sommige mensen denken dat korte programma's niet goed zijn voor heel veel, maar dat is niet het geval met Perl. Slechts een paar regels Perl-code kunnen een lange weg gaan. Dit artikel bevat enkele handige, kleine Perl-programma's.
Unieke regels verzamelen
Als uw tekstbestand veel regels bevat die duplicaten zijn en u alleen de unieke regels wilt zien, kunt u deze in een array verzamelen (in dit geval @Unique genaamd) met het volgende programma:
open (IN, "somefile. Txt"); @ Unique = ();
while () {tenzij ($ i {$ _} ++) {push (@Unique, $ _)}}
De truc hier is dat $ i {$ _} ++ de eerste keer 0 retourneert u maakt een sleutel / waarde-paar met $ _ als de sleutel en daarna nog een niet-nulwaarde.
Meerdere lege regels verwijderen
Sommige tekstbestanden hebben meerdere, opeenvolgende lege regels waardoor ze moeilijk te lezen zijn, vooral op kleine schermen. Het volgende programma drukt een tekstbestand af en comprimeert alle exemplaren van twee of meer lege regels in een enkele lege regel.
Opmerking: Een lege regel kan spaties bevatten, zoals spaties en tabs, maar geen zichtbare tekens.
open (IN, "somefile. Txt"); $ PrevBlank = 0;
while () {
if (/ S / or! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
De if-instructie in het voorgaande voorbeeld is waar als er niet-lege tekens op de regel staan of als de vorige regel niet leeg was. De $ PrevBlank-toewijzing vertelt u of de huidige regel leeg is, wat betekent dat deze nul of meer witruimte-tekens heeft en niets anders.
Lijnen uit een bestand in gesorteerde volgorde afdrukken
Het is gemakkelijk om te vergeten hoe nuttig de sorteerfunctie van Perl is. Het volgende programma leest het volledige bestand in een array, sorteert de array en drukt het resultaat af. Kort en krachtig, en behoorlijk efficiënt om op te starten:
open (IN, "somefile. Txt");
soort afdrukken ();
Een reeks lijnen afdrukken vanuit een bestand
Hebt u ooit slechts een paar regels uit een bestand willen lezen, en niet het hele ding? Het volgende programma drukt slechts een reeks lijnen af. U voert het programma uit met twee argumenten: het bereik dat u wilt en de bestandsnaam. Bijvoorbeeld, als u uw programma "showline" een naam geeft en u de regels 10 tot en met 20 van de somefile wilt zien. txt-bestand, gebruik je deze opdrachtregel:
showline 10-20 somefile. txt
Het volgende programma drukt een reeks regels af:
open (IN, $ ARGV [1]) of sterft "Kon $ bestand niet lezen. n”;
($ Start, $ Stop) = splitsen (/ - /, $ ARGV [0]);
voor ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; if ($ i> = $ Start) {print $ Line}}
Alleen de bestanden in een map vermelden
Soms wilt u mogelijk de submappen in een map negeren en zich alleen concentreren op de bestanden.U kunt de volgende bestandstest gebruiken om alle bestanden in een map weer te geven:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Een map op grootte weergeven
Om een directorylijst te sorteren op iets anders dan de bestandsnamen, moet uw programma een lijst bijhouden van records die bestaan uit de namen en andere items in de lijst. Hashes zijn geweldig om te gebruiken voor dit soort lijst met records met een sleutel (de bestandsnaam) en een waarde (de andere directory-informatie). Het volgende programma maakt een hash aan die de grootte van elk bestand in de map vermeldt en sorteert vervolgens de items voor uitvoer. (U kunt dit programma eenvoudig wijzigen om te sorteren op datum in plaats van op grootte.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (sorteer {$ i {$ b} <= & gt $ i {$ a}} toetsen% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Sorteren van mappen op extensie
Sorteren op een deel van een bestandsnaam is een iets moeilijker proces dan sorteren op bestandsgrootte of op de datum waarop het bestand werd gewijzigd. Het volgende programma breekt de bestandsnaam in tweeën en sorteert door het tweede deel. Als u Perl gebruikt op een UNIX- of Macintosh-systeem, werkt dit programma alleen voorspelbaar als de bestandsnamen geen periode of een punt bevatten:
foreach $ FullName () {
($ Name, $ Ext) = splitsen (/. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ FullName) = split (/ t /, $ Val);
print "$ FullNamen";
}
Een eenvoudige rekenmachine maken
Hebt u ooit een eenvoudig te gebruiken rekenmachine nodig om snel en vuile wiskunde uit te schakelen? Het volgende programma gebruikt de eval-functie van Perl om de antwoorden op elke vergelijking die u invoert, af te drukken. Om het programma te beëindigen, voert u een lege regel in. Dit is het programma voor het maken van je eigen rekenmachine:
while () {
$ i = $ _; chomp ($ i); tenzij ($ i) {last}
$ o = eval ($ i); print "Antwoord = $ aan";
}
Wanneer u het programma uitvoert, kunt u iets als het volgende invoeren:
((2 ** 8) + (3 ** 8))
en u krijgt dit resultaat: > Antwoord = 6817
Willekeurig lijstje
In Perl is het genereren van willekeurige getallen eenvoudig, maar het willekeurig rangschikken van de volgorde van een array is niet zo eenvoudig. Niettemin kunt u de splice-functie gebruiken om een willekeurig element uit een array te trekken en het element vervolgens in een andere array te plaatsen. Het volgende programma maakt de lijst willekeurig @ MijnLijst:
mijn @TempList = ();
while (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
De truc hier is dat rand (@MyList) een getal tussen 0 en het aantal elementen in @MyList kiest, en splice verandert dit willekeurige getal in een geheel getal.
Willekeurige mnemonische wachtwoorden genereren
Probeert de computergebruikers over te halen om wachtwoorden te maken die niet gemakkelijk te raden zijn, is een van de meest uitdagende taken voor een systeembeheerder. Mensen lijken altijd erop te staan hun geboortedata of huisdierennamen te gebruiken voor wachtwoorden - beveiliging wordt dan kinderspel.
Het volgende programma genereert willekeurige wachtwoorden. In plaats van een wirwar van moeilijk te onthouden brieven, zijn de wachtwoorden echter enigszins mnemonisch omdat ze verschijnen in paren van medeklinkers en klinkers die uitspreekbaar zijn.Door een paar goofy klinkende lettergrepen met elkaar te verbinden, kun je makkelijk te onthouden onzin-zinnen genereren.
Elke lettergreep van het wachtwoord kan uit 100 cijfers bestaan; daarom is een enkel wachtwoord van vier lettergrepen, zoals
votahubo, een van de 100 miljoen (100 tot de vierde macht) mogelijke wachtwoorden die het programma genereert. Als een systeembeheerder deze wachtwoorden toewijst, biedt dit meer zekerheid dan dat gebruikers hun eigen, gemakkelijk te raden wachtwoorden kunnen kiezen: afdrukken "Voer een seednummer in:"; $ S =;
srand ($ s ^ time);
@ c = splitsen (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
voor ($ i = 1; $ i <= 4; $ i + = 1)
{print $ c [int (rand (20))], $ v [int (rand (5))] }
De eerste twee regels van dit programma initialiseren het zaad voor de willekeurige getallen en de volgende twee regels maken lijsten met de 20 medeklinkers (min
q ) en 5 klinkers van het alfabet. De for-lus drukt eenvoudig de vier lettergrepen af.