Hurtig start i Perl. Har du Perl installeret? Perl-sprogkonstruktioner
Dukkede op i 1987.
Dette programmeringssprog er rig på muligheder for at arbejde med tekst, hvilket bestemmer dets hovedanvendelsesområde - især tekstmanipulation.
Denne artikel vil lede dig gennem trinene til at installere Perl runtime, vælge udviklingsværktøjer og oprette dit første program. I slutningen af denne guide finder du en liste over ressourcer, der hjælper dig med hurtigt at mestre det grundlæggende i Perl, samt udforske sproget mere i dybden.
Perl er det eneste sprog, hvor programmer ser ens ud før og efter RSA-kryptering.
På tidspunktet for skrivning af dette materiale nuværende version tolk er 5.22.0. Perl 6 skal udgives i 2015, men er endnu ikke veldokumenteret.
Perl-programmeringssproget anbefales stærkt ikke som et sprog til at lære programmering. Hvis du er en absolut nybegynder, er det bedre at starte med noget mindre ødelæggende for din skrøbelige bevidsthed. Seriøst, her er hvad Jon Ribbens havde at sige om dette sprog:
PHP er et lille onde skabt af inkompetente nybegyndere, mens Perl er et stort og snigende onde skabt af dygtige, men snoede fagfolk.
I øvrigt skal du heller ikke starte med PHP. Lad os nu gå i gang.
Runtime miljø
Perl er i øjeblikket officielt understøttet på tre førende platforme: Mac OS X, Unix og Windows. På de to første af dem er Perl runtime-miljøet forudinstalleret, og dets version kan findes ved hjælp af perl -v-kommandoen (den seneste version kan downloades) og til operativsystemer Windows familie Perl-tolken er tilgængelig til download på denne side. Det anbefales at vælge ActivePerl (distribution fra ActiveState) som den mest almindelige.
Integreret udviklingsmiljø (IDE)
Perl er desværre ikke særlig populær blandt udviklere af udviklingsmiljøer, så du har kun et lille antal specialiserede værktøjer at vælge imellem.
Padre, Perl IDE
Et multiplatform, letvægtsudviklingsmiljø designet specifikt til Perl og brugervenligt for begyndere. Ud over traditionel syntaksfremhævning og autofuldførelse har den også indbyggede refaktoreringsværktøjer. Forresten er Padre selv skrevet i Perl 5.
Tekstredaktører
Som med ethvert programmeringssprog har du selvfølgelig et stort udvalg af multi-platform teksteditorer at vælge imellem, fra forudinstallerede notesblokke til mere praktiske kildekoderedigeringsværktøjer med syntaksfremhævning, autofuldførelse og lignende. Vær især opmærksom på:
- KomodoEdit - en afklebet version af det kommercielle udviklingsmiljø Komodo IDE, udviklet af ActiveState (det samme som understøtter ActivePerl-distributionen), har funktioner som autofuldførelse, syntaksfremhævning, flere markører og dokumentationstips;
- Vim er en teksteditor, hvis grænseflade kan være usædvanlig for en Windows-bruger; understøtter syntaksfremhævning;
- Sublime Text er et af de bedste kildekoderedigeringsværktøjer med syntaksfremhævning, autofuldførelse osv., hvis funktionalitet er udvidet med mange eksisterende plugins;
- Notepad++ er en letvægts teksteditor, der har den mest korrekte syntaksfremhævning efter KomodoEdit; Funktionaliteten kan udvides med plugins, men der er en del af dem specifikt til Perl.
CodeGround
Også, hvis du kun ønsker at prøve Perl-programmering og ikke ønsker at installere yderligere software til din computer, kan du bruge CodeGround-tjenesten, som giver adgang til online udviklingsmiljøer med grundlæggende funktionalitet til de fleste programmeringssprog, inklusive Perl.
Det første "Hej, verden!" i Perl
Traditionelt foreslår vi, at du starter dit bekendtskab med et nyt sprog med et velkendt program:
Udskriv "Hej verden\n";
Gem denne linje i hello.pl-filen og kør det program, du lige har oprettet med kommandoen:
Perl hello.pl
Sørg dog først for det eksekverbare filer Perl er blandt dine miljøvariabler(miljøvariabler), og også at du kalder perl fra mappen med kildefilen hello.pl . Hvis det lykkes, vil du se det forventede "Hej, verden!"
Tillykke, du er begyndt at skrive Perl!
Og så på vej...
En fremragende engelsk vejledning om programmeringssproget Perl for at komme i gang kan findes på tutorialspoint.com. Derudover er der en officiel uddannelsesressource -
Jeg vil gerne advare dig på forhånd om, at denne artikel ikke vil gøre dig til en super PERL-programmør, men den vil give dig nogle nødvendige indledende informationer, der vil hjælpe dig med det videre studie af dette interessante programmeringssprog.
Jeg besluttede at skrive denne artikel, efter at jeg lærte, hvor svært det er at "få styr på" alting, selvom du har en form for PERL-manual ved hånden. Overalt, allerede i begyndelsen, begynder de at henvise til nogle mystiske termer og kommandoer, og du kan kun blinke med øjnene overrasket, eller (hvis du stadig forstår noget) få disse programmer til at fungere (ikke "som det skal", men generelt!). Denne artikel kunne kaldes "PERL for dummies", hvis den dækkede alt materialet, men her satte jeg mig som mål kun at give dig de nødvendige indledende koncepter, og så at sige "forberede dig til yderligere kampe" :).
Selvom det er meget muligt, at denne lille artikel i fremtiden "på anmodning fra arbejderne" vil vokse til noget mere.
Så... lad os begynde! Først vil jeg fortælle dig, at PERL skal være installeret på din computer. Den her ser ud til enkel betjening nogle af mine venner gik helt glip af det, og så, efter at have skrevet et simpelt program, forsøgte de at køre det i lang tid... ;) Den mest tilgængelige PERL-pakke (efter min mening) er ActivePerl, selvom denne pakke er rettet mod Windows-brugere, og hvis du har UNIX, så kan du downloade noget native fra www.perl.com. På en eller anden måde får du det og installerer perl for dig selv (hvis du ikke allerede har gjort det). Så: du får en ny "perl"-mappe, men det betyder ikke, at alle programmer skal placeres der :) Perl, der sidder der, udfører kun alle dine geniale kreationer med *.pl-udvidelsen, og hvor de selv er placeret - én bruger kender :) (sandt for windows brugere Med
installeret pakke
ActivePerl, fordi det knytter *.pl-filer).
Fordi Da denne artikel primært er beregnet til Windows-brugere, ser jeg mig selv forpligtet til at fortælle dig, at for programmer, der udføres i dette operativsystem, er det slet ikke nødvendigt at starte hvert program med linjen:
#!/usr/bin/perl
Næsten alle tutorials på dette sprog starter med det enkleste program, som ser sådan ud:
print("hej, VERDEN!\n");
Nogle af jer har sikkert allerede kopieret ovenstående program ind i din fil og bemærket, at den åbner hurtigt og lukker lige så hurtigt. Dette skyldes det faktum, at programmet er et program, og efter at det er afviklet, lukkes det med det samme, så føj endnu en linje til programmet med følgende indhold:
I sidste ende vil det hele se sådan ud:
print("hej, VERDEN!\n"); ;
Det ser ikke så simpelt ud for de uindviede ... Endda lidt skræmmende ... Men dette er kun for de uindviede, faktisk kan alt ikke være enklere! :) Kan du ikke tro det? Jeg vil bevise det nu. Først skal du vide, at print er en kommando, der udsender information til standardoutputtet STDOUT (STanDart OUT eller, mere enkelt, monitoroutput). For det andet er uforståelighed i formen \n en overgang til en ny linje, men ikke programmet, som nogle måske er bange for, men informationen på skærmen, dvs. hvis du fortsætter teksten i anførselstegn, vil den efter dette tegn blive udskrevet med ny linje
. Og hvis du skulle bruge en skråstreg (shels:) i selve teksten, så skal du sætte endnu en shels før den. For eksempel:
udskriv "\a"; #Kommandoen, hvorefter Perl #udsender et signal til SPICERprint "\\a"; #Perl vil blot udskrive \a
Så vil jeg gerne gøre dig glad: der er ikke behov for parenteser :) Brugen af dem afhænger helt af dit humør, selvom manualerne siger, at dette angiveligt er med til at fremhæve tekst i programmet. Generelt - hvem der kan lide det mere... Som du sikkert allerede har gættet, er der brug for anførselstegn for at omslutte tekst i dem, så der er to uklare punkter tilbage. Men før jeg dvæler ved dem, tror jeg, det er nødvendigt at forklare dig, hvilken slags information der findes i Perl. Den grundlæggende informationsenhed i Perl er skalaren, dvs. en separat værdi gemt i en separat variabel.
$a = "hej verden!"; #Tildel noget tekst til variabel $a $b = 777; #Tildel variabel $b et tal
Disse variabler gemmer strenge, tal og referencer. I dette tilfælde er det nødvendigt at forstå forskellen mellem tal som sådan og de tal, der er indeholdt i strengen.
$abc = "123"; #Number på linje $123 = 123; #Nummer som sådan
Semikolonet i slutningen af hver linje er faktisk... slutningen af linjen, hvilket betyder at du kan skrive hele programmet på en linje, men vi har ondt af linjerne eller noget :) Der er en undtagelse fra ovenstående : # tegnet angiver, at alt, der står i linjen efter det, er en kommentar og ikke længere gælder for programmet. Diamanttegnet er standard eller at sige i klart sprog- standard input fra monitoren (jeg skal forklare: en anmodning kommer frem på monitoren, og du indtaster selvfølgelig via tastaturet. Så trykker du enter og den indtastede værdi er allerede i Perl-variablen, hvis den er indstillet ). Hele tricket med at tilføje denne diamant i vores tilfælde er, at den vil bede dig om dette input, indtil du trykker på "enter"-knappen, og da programmet ikke angiver, hvad det skal gøre med dette input, vil perl simpelthen glemme det og vil betragte vores program som komplet. Og som et resultat af at udføre dette program, vil du og jeg se teksten Hej, verden på vores skærme. .
Lad os nu komplicere vores program lidt:
print "indtast dit navn:"; $navn = ;
print "hej $navn!"; ;
Du bør forstå, at programmer udføres linje for linje, dvs. først den første linje, derefter den anden osv.
Så på den første linje bliver vi bedt om at indtaste et brugernavn. I anden linje læser vi det ind i $name-variablen. $name er som nævnt en Perl skalarvariabel, der begynder med et dollartegn. Når jeg ser fremad, vil jeg fortælle dig, at ud over variabler, der starter med en dollar, er der også arrays (@array), hashes (%hash) og flere andre typer, som det er for tidligt at tale om. Der er lighed mellem variablen og diamanten, hvilket betyder, at vi tildeler resultatet af forespørgslen til variablen. I tredje linje udskriver vi ordet hej, og efter det udskriver vi, hvad der var gemt i $name-variablen. I vores tilfælde er dette det navn, vi bad dig om at indtaste.
Lad os tage en anden afledning, hvor jeg fortæller dig, hvad du kan gøre med variabler... Du kan gøre ALT med dem! Og det er ikke en overdrivelse. Dette er for eksempel muligt:
$a = 3; $b = 4; $c = $a+$b; #Tilføj to variable og #tildel dem til den tredje udskriv $c; # Udskriv det resulterende tal print $a+$b; # det samme, kun uden at # involverer en tredje variabel
Jeg håber alt er klart med dette... I mellemtiden, nogle mennesker forstår det, vil vi skrive et program, der udfører DOS dir-kommandoer. For dem, der ikke ved det, er dir en kommando, der viser indholdet af den mappe, hvor du befinder dig.
Dette program læser ind i $dos-variablen resultatet af at udføre dir-kommandoen, som er omgivet af bageste anførselstegn (hvis disse var simple anførselstegn, ville det ikke være en kommando, men kun et ord) og viser derefter netop dette resultat på skærmen .
Lad os så at sige vende tilbage til vores får, eller rettere, kun til lammene for nu :) Vi har lært at vise den tekst, vi skal bruge på skærmen, modtage information fra brugeren og også lært, at DOS-kommandoer bagved citater vil blive udført som DOS-kommandoer :) Det er tid til at skrive et program, der ikke vil anmode om mere end de samme kommandoer
udskriv "enter kommando:"; chmod($com =);
udskriv `$com`; ;
Af sikkerhedsmæssige årsager anbefaler jeg kraftigt ikke at indtaste FORMAT-kommandoen, gæt hvorfor :) Blandt nyskabelserne bør vi fremhæve udseendet af chmod()-kommandoen. Denne kommando fjerner \n nylinjetegnet fra de oplysninger, vi modtager i anmodningen, som er der som standard. Det, der står på den anden linje, er en stenografi af to linjer:
Vi får kun et par karakterer med dette, men det er stadig dejligt :)
På dette tidspunkt tror jeg, at du har gennemført de første trin og er klar til at fortsætte den vanskelige vej med at lære Perl.
Denne artikel er skrevet til folk, der på grund af uoverstigelige omstændigheder har et akut behov for at studere Pearl. For mig var denne omstændighed, at min computer blev en WEB-server, og jeg blev derfor en WEB-master. Det er kutyme at lære af andres fejl og erfaringer, så jeg gør dig opmærksom på min erfaring med at studere Pearl.
Det er straks nødvendigt at forklare, hvem det hele er skrevet til. Hvis din server kører på en UNIX-platform, så burde jeg være den, der læser din artikel. Jeg har installeret Windows NT workstation 4.0 (RUS) plus Service Pack 3. Da det blev tid til at lave en WEB-server ud af min computer, skyndte jeg mig til den indbyggede WEB-værtstjenester, men indså hurtigt, at jeg ikke kunne lide det. (hvorfor?). Og så rådede en venlig person til at installere Xitami WEB Server fra iMatix Corporation (http://www.imatix.com/), som stadig er tilgængelig i dag.
For en person, der er forkælet af alle mulige former for Windows og Delphi, er det ret usædvanligt at skrive programmer i Perl, så jeg anbefaler kraftigt at installere Perl Builder med det samme. Du kan få det på www.solutionsoft.com. Der var en tredive dages demoversion der.
Nå, jeg synes, det er på tide at komme direkte til sagen. Generelt fungerer et Pearl-script, ligesom ethvert andet program, sådan:
- modtager data
- behandler data
- giver resultater
Du kan overføre data til scriptet ved hjælp af to metoder - GET og POST. Forskellen mellem dem er, at hvornår ved hjælp af GET data hænger konstant ud i browserens adresselinje, for eksempel:
http://treagraf.tasur.edu.ru/cgi-bin/price.pl?Category=POWER&Description=varta
I dette tilfælde tager B_price.pl-scriptet dataene ind miljøvariabel FORESPØRGSEL-STRING.
$data=$ENV("QUERY_STRING");
Ved brug af POST-metoden sendes data til scriptets standardinput. Længden af datablokken tages i variablen CONTENT_LENGTH:
Read(STDIN,$data,$ENV("CONTENT_LENGTH"));
Nu skal disse data oversættes til en fordøjelig form, da de er kodet.
Standardkonventionen er at erstatte mellemrum med plustegn og derefter kode de resterende ugyldige tegn ved hjælp af ASCII-koder i hexadecimal, efterfulgt af et (%)-tegn. Eksempel:
Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?Category=%C2%E8%E4%E5%EE&Description=%E0%E1%E2%E3
Det betyder:
Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?Category=Video&Description=abvg
Det er bedre at afkode forespørgselsstrengen selv for første gang. Til spørgsmålet "hvordan?" Der er mange svar, der ikke giver mening at omskrive. Lad mig give dig et kort eksempel:
Udskift (+) tegn med mellemrum
$query = ~ s/\+/ /g;
Derefter erstatter vi alle kombinationer af tegnet (%), efterfulgt af hexadecimale cifre, med de tilsvarende ASCII-tegn
$query =~ s/%((2))/pack("C", hex($1))/fx;
Jeg bruger hvad Perl Builder tilbyder:
#! E:\perl5\bin\perl # kalder datahentningsrutinen $Category = $field("Category"); # hent data fra kategorifeltet $Description = $field("Beskrivelse"); # få data fra beskrivelsesfeltet $Page = $field("Page"); # få data fra feltet Side
I slutningen af scriptet placerer vi en underrutine til "gennemsigtig" datalæsning.
Sub GetFormInput ((*fval) = @_ if @_ ; local ($buf); if ($ENV("REQUEST_METHOD") eq "POST") ( read(STDIN,$buf,$ENV("CONTENT_LENGTH")) ; ) else ( $buf=$ENV("QUERY_STRING"); ) if ($buf eq "") ( return 0 ; ) else ( @fval=split(/&/,$buf); foreach $i (0 . $#fval)(($name,$val)=split (/=/,$fval[$i],2); $val=~tr/+/ /; $val=~ s/%(.. )/pack("c",hex($1))/ge; $navn=~ s/%(..)/pack("c",hex($1))/ ge; if (!defined($field($name))) ( $field($name)=$val; ) else ( $field($name) .= ",$val"; #hvis du vil have flere valg for at gå ind i et array skal du ændre til: #$field($name) .= "\0$val" ) ) return 1;
Den anden fase af scriptet - databehandling - er helt efter dit skøn. Tjek de modtagne data for nøjagtighed, skriv dem til en fil, gør hvad du vil.
Endelig skal du give nogle resultater til klientens browser, så browseren viser dem korrekt. Det vil sige, at du skal vise resultaterne i HTML. Dette gøres enkelt: (kan også gøres på forskellige måder)
Udskriv "Indholdstype: tekst/html", "/n/n"; #påkrævet linjeprint"
I feltet Kategori indtastede du: ", $Category, "
Dette gælder alt sammen for scripts, der modtager data fra en formular på en HTML-side. I dette tilfælde er siden med formularen separat, scriptet er separat. Du kan gøre det smukkere og mere praktisk: kombiner siden og scriptet til en enkelt helhed. For at gøre dette er scriptet skrevet i henhold til følgende skema:
- Når det først startes, tegner scriptet en HTML-side med en formular og et link til sig selv i ACTION-tagget. Den første kørsel bestemmes af fraværet af inputdata.
- Hvis der er inputdata, så modtager vi dem, behandler dem og producerer resultater.
#! E:\perl5\bin\perl if (($ENV("QUERY_STRING") eq "") eller ($ENV(CONTENT_LENGTH)=0)) ( # generere en side med formularen ) else (# modtage data, behandle og udskriv resultatet)
Gæstebog |
---|
Den generelle algoritme for gæstebogen er som følger:
1. Hvis en besøgende ønsker at skrive ind i bogen, så
1.1 Hentning af data
1.2 Skriv dem til en fil eller database
1.3 Vi siger tak til HTML og foreslår at læse andre indlæg
2. Hvis den besøgende ønsker at læse indlæggene i bogen, så
2.1 Læsning af poster fra en fil eller fra en database
2.2 Vi viser dem smukt i HTML
For at lette opfattelsen formaterede jeg punkt 1 og 2 med separate scripts henholdsvis add_guestbook.pl og read_guestbook.pl. Gæstebogsbeskeder gemmes i en tekstfil linje for linje, dvs. for hver post er der en linje. Dette gøres for at gøre denne fil lettere at læse. Eksempel på en indgang:
Lør 5. dec 13:31:20 1998&Natasha&student&Godt&Godt til en start. Jeg ønsker dig succes på dette område, Alexander!&no@yet&194.226.60.34
Her er en beskrivelse af felterne i den pågældende gæstebog.
Navn - fornavn, efternavn, patronym, kaldenavn - efter den besøgendes skøn
Arbejde - erhverv, erhverv
RadioButton - tre knapper: Jeg kunne lide det (godt), jeg kunne ikke lide det (dårligt), jeg er ligeglad (forskelligt)
Tekst - tekstboks med kommentarer og noter
E-mail - returadresse
add_guestbook.pl - bogindtastning
#! e:\perl5\perl # Første linje kræver som sædvanlig "ssi-pl.pl"; # Jeg bruger navigationslinjen som en SSI-inkludering. For at gøre dette skal du bruge modulet ssi-pl.pl if (($ENV("QUERY_STRING") eq "") eller ($ENV(CONTENT_LENGTH)=0)) ( # Hvis der ikke er nogen inputdata, så generer en side med formularen print<
HTML DoInclude("_menu.htm"); # Dette er SSI-aktivering af navigationslinjen. trykke<
|
Sende HTML dø; ) # Nu får vi inputdataene.$Name = $field("Navn"); $Work = $field("Work" ; $RadioButton = $field("RadioButton"); $Tekst = $felt("Tekst"); $Email = $field("E-mail" ; $Send = $field("Send" ; # dette felt er ikke brugt # Tjek om obligatoriske felter er udfyldt. # Hvis ikke, generér<
<
|
beder dig om at udfylde de påkrævede felter. if ($Name eq "" || $Email eq "" || $Text eq "") ( print Bog med klager og forslag - fejl |
HTML ) ellers # er alle data indtastet korrekt ( # Hvis alle felter er udfyldt korrekt, så begynder vi at behandle dem. $Text=~tr/\r\n/ /; # erstat linjeskiftet med et mellemrum # Hvis i formularens tekstboks trykkede den besøgende på Enter, #, så skal du fjerne de nye linjetegn, så du kan skrive # alle felterne i formularen på én linje i filen if ($Work eq "") ($ Work=" "); Brug dette symbol til at adskille vores felter i filen open(OutFile, ">>gæstebog.txt") || Åbn filen for at tilføje $line=join("&", $Tid, $Navn, $Work, $RadioButton, $ENV(REMOTE_HOST) # Og til sidst kombinerer vi alle formularfelterne i en linje i tilfælde af at vi tilføjer den besøgendes IP-adresse taget fra miljøvariablerne til sidst. udskriv OutFile "$line\n"; closeOutFile; # Skriv den resulterende linje til en fil og luk den. # Tilbage er kun at sige tak til den besøgende. # print en succesmeddelelse print "Content-type: text/html\n\n"; print" \n" ; udskriv "\n" ; udskriv " \n" ; udskriv " "."\n" ; udskriv " "."\n" ; udskriv "
"."\n" ; udskriv " | "; udskriv" | "."\n" ; udskriv "
"."\n" ; DoInclude("D:/InetPub/wwwroot/_menu.htm"); udskriv "
| "."\n" ; udskriv " "."\n" ; udskriv " | Dine data"."\n" ; print " er blevet accepteret. Tak. \n" ; udskriv ""; udskriv" | "."\n" ; udskriv "
"."\n" ; udskriv " |
\n" ; udskriv "\n" ; ) # Glem ikke rutinen til at parse data fra formularen. sub GetFormInput ( (*fval) = @_ if @_ ; local ($buf); if ($ENV("REQUEST_METHOD") eq " POST") (læs (STDIN,$buf,$ENV("CONTENT_LENGTH")); else ( $buf=$ENV("QUERY_STRING"); ) if ($buf eq "") (retur 0 ; ) else (@ fval=split( /&/,$buf); foreach $i (0 .. $#fval)(($navn,$val)=split (/=/,$fval[$i],2); $val =~tr/ +/ /; $val=~ s/%(..)/pack("c",hex($1))/ge $name=~ s/; %(.. )/pack("c",hex($1))/ge if (!defined($field($name))) ( $field($name)=$val; ) else ( $field( $name) = ",$val"; #hvis du vil have multi-selects til at gå til et array til: #$field($name) .= "\0$val" ) ) return 1;
read_guestbook.pl - læser en bog
#! e:\perl5\perl # Første linje kræver som sædvanlig "ssi-pl.pl"; # Jeg bruger navigationslinjen som en SSI-inkludering. For at gøre dette skal du bruge ssi-pl.pl-modulet open(InFile, "gæstebog.txt") || dø; # Åbn filen med gæstebogsposter. @linjer=HTML DoInclude("D:/InetPub/wwwroot/_menu.htm"); trykke<
|
De skriver til os:
HTML luk InFile; # Luk filen med gæstebogsposter. Du er ved at tage på en rejse ind i Perl-programmeringens verden. Din rejse bliver så meget desto mere behagelig på grund af tilstedeværelsen af et stort antal eksempler, som du vil støde på undervejs. Begyndelsen på vores rejse dækker sprogets grundlæggende begreber. Efterhånden vil du lære nok om Perl til at lave små programmer. I slutningen af vores rejse vil du allerede have den nødvendige viden til at kunne skabe fuldgyldige applikationer. Taler du andre programmeringssprog? Hvis ja, så vil det være en fornøjelse for dig at lære Perl. Hvis ikke, så skynd dig ikke, prøv alle de foreslåede øvelser og eksempler og vær ikke bange for at eksperimentere! OprindelsePerl var resultatet af én mands anstrengelser og efter eget udsagn dovenskab. Dette er et unikt sprog, hvis essens ikke kan formidles ved en simpel beskrivelse af tekniske detaljer. Perl er en sindstilstand. Et af sprogets særheder er dets navn. Det har flere definitioner. Perl stod oprindeligt for Practical Extraction Report Language. Imidlertid kalder programmører det meget ofte Phatologically Eclectic Rubbish Lister eller endda Praktisk alt virkelig sympatisk. Lad os bruge et par minutter på at forstå, hvad Perl er, og hvilke opgaver den blev tildelt på tidspunktet for dens oprettelse. Tilbage i 1986 arbejdede Larry Wall på problemet med at generere rapporter fra et stort antal tekstfiler, der overlappede hinanden. Da han var Unix-programmør, og fordi opgaven involverede at manipulere indholdet af tekstfiler, prøvede han først at bruge Awk. Men det stod hurtigt klart, at Awk ikke var egnet til jobbet, og da der ikke var andre kandidater til at løse problemet, var det eneste, der var tilbage, at opfinde sit eget værktøj, der kunne bruges i fremtiden. I stedet for at spilde sin tid opfandt Larry simpelthen et nyt programmeringssprog og skrev en tolk til det. Dette virker som et paradoks, men det er ikke helt sandt - det, du gør, er altid en masse arbejde, men hvis du gør det korrekt, så vil dette arbejde helt sikkert betale sig. Larry tilbød snart sin skabelse til Usenet-nyhedslæserfællesskabet. Brugere med adgang til Usenet gav Perls skaber effektiv feedback og spurgte, hvordan man gør dette, det og det andet. Larry havde ikke engang til hensigt at stille mange af disse problemer til sit lille nye programmeringssprog. Det nye programmeringssprog havde en vægt på systemkontrol og tekstbehandling. Efter flere revisioner kunne den allerede bruge regulære udtryk, signaler og netværkssockets. Det blev kendt som Perl og blev hurtigt populært blandt Unix-programmører, og snart resten af os. Larry vedligeholder ikke længere Perl alene, men beholder sin eksklusive titel som hovedudvikler. Perl-programmer minder meget om C-programmer, måske fordi Perl blev skrevet i C, og måske fordi Larry fandt nogle C-konstruktioner nyttige. Men Perl er mindre pedantisk og meget mere kortfattet end C. Perl er designet til at hjælpe programmøren med at udføre rutineopgaver, der er for vanskelige eller dårligt bærbare til skallen, og for abstrude eller svære at kode til C (eller et hvilket som helst andet sprog). Når du har mestret Perl, kan du opleve, at du bruger mærkbart mindre tid på at citere forskellige shell-parametre korrekt (eller udføre C-deklarationer korrekt) og mere tid på at læse Usenet-nyheder og stå på ski ned ad bjerget, fordi Perl er et vidunderligt værktøj til at hjælpe dig med at blive en programmør. "Nogle af de gamle" sagde: "Du bør ikke lære et programmeringssprog, der ikke radikalt ændrer din forståelse af programmering." Vær sikker på, når du først har lært Perl, vil du se på programmering fra et helt andet perspektiv. De kraftfulde konstruktioner af dette sprog giver dig mulighed for at skabe meget effektive løsninger og universelle værktøjer med minimal indsats. Disse værktøjer kan bruges i fremtiden, fordi programmer skrevet i Perl er meget bærbare og klar til brug. Som et resultat vil du have endnu mere tid til at læse Usenet-nyheder og gå på barer med venner. Perl er meget god til at håndtere opgaver på lavt niveau, især siden den femte version af sproget blev udgivet. Omkostninger og licensPerl er gratis. For at være mere præcis distribueres Perl under GNU Public License. Den komplette kildekode og dokumentation er helt gratis at kopiere, kompilere og udskrive. Alle de programmer, du skriver i Perl, er dine, og du kan gøre, hvad du vil med dem. Udover UNIX-computere findes Perl også til andre platforme - Windows, DOS, Atari, Amiga osv.
|
Mønster symbol | Beskrivelse |
-en | |
EN | ASCII-streng uden null-tegn |
b | Bitstreng (LSB kommer først) |
I | Bitstreng (den mest betydningsfulde bit kommer først) |
Med | Single-byte signeret tegn |
MED | Single-byte usigneret tegn |
d | Flydepunkt, dobbelt præcision |
f | Flydende kommaværdi, enkelt præcisionsmønster |
h | Hexadecimal streng (lave cifre først) |
N | Hexadecimal streng (mest signifikante bits først) |
jeg | Signeret heltal |
jeg | Usigneret heltal |
l | Signeret heltal af typen lang |
L | Det samme, kun uden skiltet |
n | Kort heltal |
N | Langt heltal |
s | Pointer til streng |
s | Signeret kort heltal |
S | Usigneret kort heltal |
u | Streng afkodning |
v | Kort heltal |
V | Langt heltal |
x | Spring en byte frem |
X | Spring en byte tilbage |
@ | Gå til en specificeret position i en linje |
PAKKE DATA I BINÆRE STRINGE
For at udlæse binære data skal scriptet pakke skalarværdier ind i binære tegnstrenge. For at gøre dette skal du bruge pakkefunktionen, hvis format er angivet nedenfor:
$result = pack(Skabelon, Liste);
Følgende programfragment illustrerer brugen af pakkefunktionen:
$farve = pack("C3", $r, $g, $b);
$data = pack("L*", @longword);
$bin = pack("S2L", @stuff);
Pakningsfunktionen bruger de samme mønstertegn som udpakningsfunktionen, bortset fra a-tegnene. A, u, x, x, @. ARBEJDER MED KATALOGER Perl giver ikke kun en bred vifte af filbehandlingsfunktioner, men også nogle meget
praktiske funktioner
Perl-scripts giver dig mulighed for at åbne og læse indholdet af filer. På samme måde åbner disse scripts mapper og læser navnene på de filer, de indeholder. For at åbne en mappe bruger scripts funktionen opendir, der sender mappemarkøren og stien til den. Til læsning filliste
indeholdt i mappen, bruger scriptet funktionen readdir. Til sidst bruges closedir-funktionen til at lukke mappen. Følgende programfragment illustrerer brugen af readdir-funktionen til at vise en liste over filer i den aktuelle mappe:
Opendir(Dir, $INC) || dø; while ($file = readdir(Dir)) ( print "$file \n" ) closedir(Dir);
Dette uddrag bruger $INC-variablen til at få adgang til den aktuelle mappe. Ved at ændre $INC til $ARGV, viser scriptet en liste over filer indeholdt i den mappe, du har angivet på kommandolinjen.
Ud over de katalogfunktioner, der er diskuteret ovenfor, tilbyder Perl et sæt funktioner, der giver dig mulighed for at placere det aktuelle indeks i en katalogliste:
$result = rewinddir(DirHandle);
$result = telldir(DirHandle);
$result = seekdir(DirHandle, Position);
FORMATERT OUTPUT
I dette kapitel lærte du flere måder at formatere scriptoutput ved hjælp af printfunktionen. I lighed med C understøtter Perl også funktionerne printf og sprintf. Derudover understøtter Perl også generering af kolonnebaserede rapporter ved hjælp af formularskabeloner.
BRUG AF UDSKRIVNINGSFUNKTIONEN
Scripterne i dette kapitel gjorde udstrakt brug af printfunktionen. Derudover giver Perl specielle variabler, der påvirker driften af printfunktionen. Tabel 12.5 karakteriserer kort disse særlige variable.Tabel 12.5. Særlige variabler, der styrer udskrivningsfunktionen
For at bruge disse specielle variabler, tildeler du dem blot de værdier, du ønsker. For eksempel bruger følgende programfragment $-variablen til at angive en separator mellem printelementer:
Perl har printf- og sprintf-funktioner, som minder meget om de tilsvarende C runtime-biblioteksfunktioner. De har følgende format: $result = printf( Format, List);$result = sprintf(Format, Liste);
Som standard sender printf-funktionen formateret output til STDIO, og sprintf-funktionen returnerer en formateret streng. I begge tilfælde er strengformatet næsten identisk med C-sprogfunktionerne, bortset fra at Perl-sprogfunktionerne ikke understøtter længdeangivelsen (*). Følgende programfragment illustrerer brugen af funktionerne printf og sprintf.
$præcision = 2;
$pi = 3,1415; printf("%.2f\n", $pi); # vil udskrive 3.14 printf("%.$(præcision)f", $pi); # vil udsende 3.14 KALD TIL EKSTERNE PROGRAMMER FRA ET SCRIPT I PERL I en vis forstand er Perl en erstatning for shell-scripts systeminteraktion , herunder opkald eksterne programmer . De følgende afsnit diskuterer flere måder at kalde eksterne programmer fra Perl scripts . Husk dog, at ved at tillade scripts at udføre systemkommandoer, åbner du sikkerhedshuller i din vært. Hold dig til det almindelig regel
Udfør ikke eksterne kommandoer fra et Perl-script. Men hvis du er tvunget til at udføre eksterne kommandoer fra et script, kan du bruge de indbyggede kommandoer til disse formål.
systemfunktioner
, exec eller gaffel.
REGELMÆSSIGE UDTRYK
Igennem dette kapitel har du set eksempler på strengbehandlingsfunktioner. Mange af dem er baseret på begrebet regulære udtryk.
For at reducere størrelsen af regulære udtryk bruger Perl specialtegn. Tabel 12.6 viser nogle af de symboler, der bruges af Perl-scripts i regulære udtryk X.
Tabel 12.6. Symboler brugt i regulære udtryk
Symbol | Beskrivelse |
. | Matcher ethvert tegn (undtagen nylinje) |
(..) | Grupperer en sekvens af elementer |
+ | Opfylder det forrige mønster en eller mere engang |
- |
Matcher mønsteret nul eller én gange |
* | Matcher mønsteret en eller nul gange |
[...] | Matcher en karakter fra et givet sæt |
[^...] | Matcher et tegn fra sættet opnået ved negation |
(...|...|...) | Matcher et af alternativerne |
^ | Matcher begyndelsen af en streng |
$ | Matcher mønsteret i slutningen af linjen |
(n,m) | Matcher mønsteret n til m gange |
(n) | Matcher mønsteret nøjagtigt n gange |
(n,) | Matcher mønsteret mindst n gange |
\n\tetc. | Matcher newline, fane osv. |
\b | Matcher ved ordgrænser |
\B | Matcher inden for ordgrænser |
\d | Svarer til figuren |
\D | Passer ikke til nummeret |
\s | Matcher plads |
\S | Matcher ikke et mellemrum |
\w | Matcher et bogstav eller tal |
\W | Matcher et tegn, der hverken er et bogstav eller et tal |
Perl placerer regulære udtryk (mønstre) i skråstreger, dvs. i skråstreger, for eksempel i formen /mønster/. Følgende programfragment illustrerer Perl regulære udtryk:
# følgende regulære udtryk er sande, hvis: /ig/ # streng indeholder "ig" /(b|d|f)ig/ # streng indeholder "big", "dig" eller "fig" /+/ # streng indeholder et tal /*/ # streng indeholder en identifikator
Hvis disse udtryk ikke giver mening for dig, så fortvivl ikke. I dette kapitel skal vi se på flere regulære udtryk. Indtil videre skal du bare huske, at Perl sætter regulære udtryk mellem to skråstreger, som vist ovenfor.
BRUG AF REGELMÆSSIGE UDTRYK TIL SØGNING AF SØGEORD
Perl-scripts bruger regulære udtryk for at gøre strengsammenligninger nemmere. For at kontrollere, om en streng indeholder et givet mønster, kan scriptet bruge regulære udtryk som dette:
Hvis ($str =~ /mønster/)
I dette tilfælde tager regulære udtryk værdien<истинно>hvis mønsteret findes i streng ($str). Hvis strengen by indeholder mønsteret, returnerer udtrykket værdien<ложно>.
For eksempel tester følgende udtryk, om strengen indeholder teksten WebProgramming:
For at kontrollere, om der er et nøjagtigt match, skal udtrykket binde sammenligningen til begyndelsen og slutningen af strengen. For eksempel har følgende udtryk værdien<истинно>, hvis og kun hvis $str-variablen tager en af tre værdier:
($str =~ /^ba(na) (2,4)$/)
På samme måde er det følgende udtryk sandt, hvis og kun hvis $str indeholder ordet
($str =~ /\bthe\b/)
BRUG AF REGELMÆSSIGE UDTRYK TIL AT ANALYSE INPUT-DATA
Efterhånden som dine Perl-scripts bliver mere komplekse, vil der være mange tilfælde, hvor du vil vide mere end blot at tjekke, om et mønster matcher en streng eller ej. For eksempel vil du måske have et script til at udtrække en bestemt strengværdi Ved at bruge gruppering af tegn () i et regulært udtryk, kan scriptet udtrække matchende værdier fra en streng og danne en liste over dem. For eksempel bruger følgende programfragment regulære udtryk til at udtrække måneder, dage og år fra en liste:
$str = "1. januar 1997,";
($m, $d, $y) = $str =~ /\s*(\S*)\s + (\d+)\D + (\d(4))/; - Spring først over;
speciel karakter
- skriv alle ikke-specialtegn til $m-variablen
- (variabel for at angive måneder);
- spring over specialtegn;
- placere alle tal i $d-variablen (variabel for optagelsesdage);
- spring over alle tegn, der ikke er tal;
- skriv fire cifre i variablen $y (variabel for at angive år).
Perl understøtter også en anden form for mønstermatchning ved at bruge (=~) operatoren, som tilføjer negationen af resultatet: (!~). Denne operator svarer til udtrykket!($str=~/pattern/).
REGELMÆSSIGE UDTRYK TIL SØG OG UDSKIFTNING AF STRENGE Hidtil har du brugt mønstermatchende operatorer. Det viser sig, at Perl understøtter to andre regulære udtryk, der ændrer den strengvariabel, der testes. I det følgende udsagn erstatter Perl den del af strengen, der matcher mønsteret med:
givet streng
$str =~ s/mønster/erstatning/;
på
$str =~ s/\bfarve\b/farve/;
på
$str =~ s/\bfarve\b/farve/g;
Ved at bruge i-suffikset kan du angive, at søgningen skelner mellem store og små bogstaver.
I modsætning til blot at tjekke for et mønster, udfører følgende udtryk også erstatning:
$str =~ tr/SearchList/ReplacementList/;
For eksempel kan udskiftning af alle små bogstaver med de samme store bogstaver gøres sådan:
$str =~ tr/a-z/A-Z/; # skifter store og små bogstaver fra nedre til øvre
Overvej selv følgende eksempel:
$letters = "abcde";
print "$letters\n" # Udskriv abcde $letters =~ tr/a-z/A-Z/;
udskriv "$letters\n" # Udskriv ABCDE
GENOPTAGE
Dette kapitel giver en introduktion til Perl-programmering.
Ved at bruge de begreber, der er diskuteret her, kan du skrive komplekse CGI-scripts i Perl. Det næste kapitel vil hjælpe dig med at få færdighederne til at oprette CGI-scripts i Perl, som du kan køre på din egen server. Før du går videre, skal du sørge for at forstå følgende nøglebegreber:
Perl er et fortolket programmeringssprog, der bruges af programmører til at skrive scripts til internettet og internettet.
$letters = "abcde";
Perls konstruktioner ligner dem i C i mange henseender, men Perl tilbyder mange ekstra funktioner, især til håndtering af strenge og filer, der er svære at finde i C. Perl er det primære sprog til at skrive CGI-programmer til internettet og internettet, primært på grund af dets fleksibilitet, kompakte stil og høje sikkerhed. VÆSENTLIGE WEBSITES FOR INFORMATION OM PERL Følgende websteder hjælper dig med at finde information om detaljer, du er interesseret i vedrørende Pcrl-sproget, dets scripts og specifik information om Perl 5-sprogressourcer og dets biblioteker. Brug disse websteder som udgangspunkt for din søgning. I dette kapitel lærte du, hvordan du bruger Perl til at skrive ret komplekse CGI-scripts. Ved at bruge den teknologi, som du har stiftet bekendtskab med, kan du levere tjenester fra en professionel programmør til dine kunder, som gerne vil have deres virksomhed repræsenteret på nettet. Kapitel 14 introducerer dig til Java-sproget. Som du vil se
- Perl er et alsidigt og fleksibelt programmeringssprog, der kan bruges til at udvikle CGI-scripts til nettet såvel som traditionelle programmer til hverdagsbrug.
- Perl er velegnet til tekstbehandling, databaseadgang, den er bærbar og giver sikkerhed ved arbejde på netværk. Alle disse egenskaber er vigtige for webprogrammering.
- Perl-scripts bruger i vid udstrækning regulære udtryk til tekstbehandling.
- De fleste scripts på nettet er nu skrevet i Perl. Sprog som JavaScript og VBScript kan dog gribe ind i Perls monopol.