Perl Basics: een spoedcursus voor CGI-ontwikkelaars

9

Perl is een scripttaal. Het is oud. Het wordt gerespecteerd. Het is overal. Als je ooit een CGI-script hebt gezien waarop een eenvoudige webapplicatie uit de late jaren 90 draaide, dan keek je naar Perl.

Het doet twee dingen goed. Ten eerste vervangt het DOS-batchbestanden en C-shellscripts. Ten tweede voedt het webservers. Dat is de context die er nu toe doet.

Het goede nieuws? Broncode is gratis. Ontwikkelaars geven het weg. U kunt duizenden scripts downloaden. Je kunt ze bestuderen. Je kunt ze breken.

Het slechte nieuws? Een groot deel van die code is onleesbaar. Perl moedigt een stijl aan die zo cryptisch is dat hij aan verduistering grenst. Als je niet weet wat je doet, weet je ook niet wat je leest.

In deze handleiding wordt ervan uitgegaan dat u al codeert. Als je C kent, loop je voorop. Zo niet, begin dan hier. We slaan de filosofie over. We komen bij de syntaxis.

De tolk aan de praat krijgen

U hebt de Perl-interpreter nodig.

Als je UNIX gebruikt, is het waarschijnlijk daar. 99,99% kans. Controleer uw terminal.

Als u Windows of Mac gebruikt, gaat u naar de officiële site. Download de nieuwste versie. Installeer het. Perl is gratis. Het is open source. Het bestaat al sinds 1987. Denk niet te veel na over de installatie.

Zoek na de installatie de DOCS-directory. Het wordt meegeleverd met het pakket. Scan het. Lees nog niet elk woord. Het is compact. Het is droog. Maar het is accuraat. Je hebt het later nodig als de basis niet meer klopt.

Je eerste script

Bepaal uw pad. Voeg het uitvoerbare Perl-bestand toe. Open een teksteditor. Maak een bestand met de naam test1.pl.

Typ dit:

Bewaar het. Open uw opdrachtprompt. Type:

Je ziet ‘Hallo wereld!’ op het scherm. Dat is stoer. Dat is standaarduitvoer.

Op UNIX kunt u #!/usr/bin/perl aan de eerste regel toevoegen. Vervolgens kunt u gewoon ./test1.pl typen. Schoner. Sneller.

Het print -commando wordt uitgevoerd naar stdout. De \n is een regelinvoer. Eenvoudig.

Probeer dit:

Twee lijnen. Eén opdracht.

Waarom werkte het? Vanwege dubbele aanhalingstekens. In Perl activeren dubbele aanhalingstekens de interpretatie van citaten. Het ontleedt escape-tekens.

Enkele aanhalingstekens gebruiken?

Nu zie je letterlijke tekst. \n blijft als \n. Geen interpretatie. Geen magie.

Er is ook het backquote-teken: `.

Hiermee wordt een besturingssysteemopdracht uitgevoerd. De uitvoer wordt op het scherm afgedrukt. Op Windows is cmd /c noodzakelijk. dir is geen uitvoerbaar bestand. Het is een ingebouwde opdracht van de opdrachtinterpreter.

Als u print 'dir'; probeert op Windows NT, mislukt dit. Je hebt de shell-verpakking nodig.

Let op het teken /. Het wordt gebruikt voor reguliere expressies. Je ziet het overal.

print gebruikt komma’s als scheidingstekens:

Er zijn ook punten nodig als aaneenschakelingsoperatoren:

De punt verbindt tekenreeksen. De komma scheidt argumenten.

C-programmeurs zullen printf leuk vinden. Het werkt precies zoals C.

Variabelen en gegevenstypen

Perl-variabelen hebben geen declaratie nodig. Ze bestaan ​​op het moment dat u ze toewijst.

Gebruik altijd een $ -symbool.

Dubbele aanhalingstekens interpreteren ontsnappingen. Enkele aanhalingstekens niet.

Cijfers werken ook.

\t is een tabblad. Perl regelt het.

Tekenreeksaaneenschakeling gebruikt de punt:

Er bestaat een afkorting. .= werkt als +=.

Arrays

Arrays beginnen met @.

Arrays zijn nul-geïndexeerd. Zoals C. Zoals Java. Zoals Python.

De notatie $#a geeft u de hoogste index. Niet de telling. De index. Dus als je drie items hebt, is $#a 2.

Hashes

Hashes beginnen met %. Het zijn sleutel-waardeparen.

‘bar’ is gekoppeld aan ‘hond’. ‘miauw’ naar ‘kat’.

Er is een schonere syntaxis. De => -operator.

Het citeert de linkerkant. Het fungeert als een komma. Het maakt code leesbaar. Gebruik het.

Perl is gemakkelijk als je stopt met vechten tegen de syntaxis. De basis is eenvoudig. Bij de geavanceerde dingen worden dingen raar. Blijf bij de kern. Beheers de variabelen. Beheers de regels voor het citeren.

De rest zijn slechts patronen. En slechte gewoonten.

Als je enige tijd in C hebt doorgebracht, zal de syntaxis van Perl bekend aanvoelen. Het leent zwaar van die lijn, maar het maakt de greep op striktheid los.

Maak een for -lus. Het ziet er precies zo uit als je verwacht:

U kunt ook op while -instructies vertrouwen voor eenvoudigere iteraties. Hier wordt de variabele binnen het blok verhoogd:

Logische poorten volgen dezelfde regels als C. Gebruik && voor “en”, || voor “of”, en ! voor “niet”.

Opmerking: Perl biedt een tweede set vergelijkingsoperatoren voor tekenreeksen. Terwijl == de numerieke gelijkheid controleert, controleert eq de gelijkheid van de tekenreeks.

De numerieke operatoren blijven standaard:
== (gelijk)
!= (niet gelijk)
<, <=, >, >=

Maar als u met tekst te maken heeft, geeft u wellicht de voorkeur aan de op woorden gebaseerde alternatieven:
eq (gelijk)
ne (niet gelijk)
lt (minder dan)
le (kleiner dan of gelijk)
gt (groter dan)
ge (groter dan of gelijk)

Itereren door arrays

Het doorlussen van een verzameling in Perl is schoon dankzij foreach. Het wijst elk element van een array één voor één toe aan een scalaire variabele.

Hier krijgt $b de waarde van ‘hond’, dan ‘kat’ en dan ‘paling’. De lus eindigt wanneer de array @a is uitgeput.

De beugelregel

Er is één niet-onderhandelbare syntaxisregel in Perl: accolades.

U moet { en } gebruiken om codeblokken om te laten lopen, zelfs als het blok slechts één regel bevat.

Sla de accolades over en de compiler zal klagen.

Subroutines schrijven

Functies in Perl worden gedefinieerd met het trefwoord sub.

Wanneer u een subroutine aanroept, worden alle argumenten die eraan worden doorgegeven, in een speciale array geplaatst met de naam @_.

De variabele $#_ retourneert de hoogste index van de @_ array. Omdat arrays nul-geïndexeerd zijn, geeft dit u feitelijk het aantal parameters min één.

Het is een beetje stom, maar als je er eenmaal aan gewend bent, is het efficiënt.

Variabel bereik en retourwaarden

Om te voorkomen dat de globale naamruimte binnen een functie vervuild raakt, declareert u lokale variabelen met het trefwoord local.

U kunt een functie ook expliciet aanroepen met het & -symbool.

Technisch gezien is & alleen vereist als er onduidelijkheid is in de parser. Maar veel ontwikkelaars gebruiken het uit gewoonte om expliciet te zijn.

Gebruik het trefwoord return om een ​​resultaat terug te sturen naar de beller.

Invoer en uitvoer

Het lezen van de standaardinvoerstroom (STDIN ) is eenvoudig. De hoekhaakoperator leest regel voor regel.

Hierbij wordt ervan uitgegaan dat de invoer een geldig geheel getal is. Als de gebruiker afval typt, breekt de logica.

Voor invoer van één teken gebruik je getc :

Of gebruik de functie read, die de lengte van de invoer specificeert die moet worden vastgelegd.

De ‘1’ aan het einde geeft aan dat slechts één teken wordt gelezen.

Omgevings- en opdrachtregelgegevens

Perl maakt systeemgegevens openbaar via globale variabelen.

De %ENV -hash bevat alle omgevingsvariabelen. Houd er rekening mee dat de toetsen in hoofdletters moeten staan.

Als u toegang wilt krijgen tot opdrachtregelargumenten, kijkt u naar de @ARGV -array.

  • $ARGV[0] is het eerste argument.
  • $ARGV[1] is de tweede.
  • $#ARGV geeft je de index van het laatste argument (tel min één).

Dit maakt het eenvoudig om scripts te bouwen die dynamische invoer accepteren zonder hardcoding-waarden.

Is Perl nog steeds relevant?

Het is een terechte vraag. Gebruiken programmeurs nog steeds Perl? Ja.

Wordt Perl anno 2024 nog steeds gebruikt? Ja, hoewel de rol ervan is verschoven. Het is een hoogwaardige, algemene, geïnterpreteerde, dynamische taal. Het domineert nieuwe greenfield-webprojecten niet zoals Python of Node.js dat zouden kunnen.

Perl blijft echter een krachtpatser voor systeembeheer en verouderd onderhoud. Het blinkt uit in tekstverwerking en snelle scripting