Pearl programmeringsspråk handledning. Perl -datatyper


Det mest använda skriptspråket är dock Perl.

Detta kapitel fokuserar på Perl -språket och dess användning. När du har lärt dig att programmera med Perl kan du använda det för att skriva skript som löser en mängd olika Internet- och webbprogrammeringsproblem.

Särskild vikt kommer att läggas vid de funktioner som används när du skriver CGI -skript. Om du aldrig har programmerat i Perl tidigare, använd det här kapitlet som en utgångspunkt för att behärska det.

Begreppen du lär dig i det här kapitlet lär dig hur du skriver professionella manus i Perl.

Detta kapitel behandlar inte bara grunderna i Perl -programmering, utan också flera andra aspekter. När du har läst det här kapitlet kommer du att kunna förstå följande nyckelbegrepp: Perl är ett tolkat programmeringsspråk som är specifikt inriktat på textbehandling.

Programmerare hänvisar ofta till Perl -program som skript. Med Perl skapar programmerare CGI -formulär.

P erl stöder fil- och databasoperationer. Detta gör den väl lämpad för lagring och hämtning av information enligt behoven hos webbanvändare.

P erl levereras med ett felsökningsprogram som du testar din Perl -kod med

I denna avdelning:

8 PERL programmeringsspråk
Denna artikel kommer att introducera dig till en kurs om Perl -språket, att ge jämförande egenskaper Perl och C / C ++, kommer att prata om Perls rikedom.

8 Använda PERL
Principer för att använda Perl, eller vad du kan göra med Perl.

8 Introduktion till PERL -språket
Grundläggande begrepp för Perl -språket, första exemplet.

8 Installera PERL
En snabb ledtråd om hur du kommer igång med Perl.

8 Använda PERL Debugger
Grundläggande principer för att arbeta med Perl -felsökaren; felsökningskommandon; exempel på användning.

8 Datatyper i PERL
Kapitlet ägnas åt datatyper och övergång från en typ till en annan.

8 Variabler
Perl stöder tre typer av variabler: skalarer, matriser och associativa matriser... Om dem och tal. ;-)

8 PERL -operatörer
Översikt över huvudet Perl -operatörer.

8 PERL -språkkonstruktioner
En beskrivning av funktionerna i Perl -syntaxen. Grundläggande operatörer.

8 Subrutiner
Syntax och semantik för underrutiner i Perl.

8 Strängbehandling
Beskrivning av funktioner för bearbetning av strängvariabler.

8 Listbehandling
Flera funktioner som utökar utbudet av möjligheter att arbeta med listor.

8 Arbetar med matriser
Perl innehåller flera inbyggda funktioner som hjälper dig att arbeta med matriselement.

8 CGI -skript med PERL
I det här kapitlet lär du dig hur du använder Perl för att skapa CGI -skript.

Denna artikel är skriven för personer som på grund av tvingande omständigheter har en brådskande uppmaning att studera Pearl. För mig var en sådan omständighet att min dator blev en WEB-server, och jag därför en WEB-master. Det är vanligt att lära av andras misstag och erfarenheter, så jag uppmärksammar min erfarenhet av att studera Pearl.

Det är omedelbart nödvändigt att klargöra för vem allt detta är skrivet. Om din server körs på en UNIX -plattform bör jag läsa din artikel. Jag har Windows NT-arbetsstation 4.0 (RUS) plus Service Pack 3. När det var dags att göra en WEB-server från datorn skyndade jag mig till de inbyggda tjänsterna WEB -nod men insåg snabbt att jag inte gillade det (varför?). Och sedan rekommenderade en snäll person att installera Xitami WEB Server från iMatix Corporation (), som fortfarande finns kvar idag.

När det gäller Pearl själv är det något mer komplicerat. Efter att ha rotat igenom olika Perl -servrar (www.perl.org, www.perl.com) fick jag reda på att det finns så många versioner av Perl att det är ganska svårt att välja något specifikt. Samtidigt finns det ingenstans några begripliga rekommendationer angående valet av den eller den versionen. Efter att ha provat nästan alla Windows -versioner bestämde jag mig för Active Perl ().

Det är ganska ovanligt att en person som är bortskämd med alla slags Vindovoz och Delphi skriver program i Pearl, så jag rekommenderar starkt att du installerar Perl Builder direkt. Du kan få det på www.solutionsoft.com. Det fanns en trettio dagar lång demoversion.

Jag tror att det är dags att börja jobba. I allmänhet fungerar ett Pearl -manus, precis som alla andra program, så här:

  1. tar emot data
  2. behandlar data
  3. ger resultat

Du kan skicka data till skriptet med två metoder - GET och POST. Skillnaden mellan dem är att när med hjälp av GET data hänger konstant i webbläsarens adressfält, till exempel:

Httr: //treagraf.tasur.edu.ru/cgi-bin/price.pl? Category = POWER & Description = varta

I det här fallet tar skriptet B_price.pl data i miljövariabeln QUERY-STRING.

$ data = $ ENV ("QUERY_STRING");

När du använder POST -metoden överförs data till standardinmatningen i skriptet. Datablockets längd tas i variabeln CONTENT_LENGTH:

Läs (STDIN, $ data, $ ENV ("CONTENT_LENGTH"));

Nu måste dessa data översättas till en lättsmält form, eftersom den är kodad.

Standardkonventionen är att ersätta mellanslag med plustecken och sedan koda de återstående ogiltiga tecknen med hjälp av ASCII -hexadecimala koder som föregås av ett (%) -tecken. Exempel:

Http: //treagraf.tasur.edu.ru/cgi-bin/B_price.pl \? Category =% C2% E8% E4% E5% EE & Description =% E0% E1% E2% E3

Detta betyder:

Http: //treagraf.tasur.edu.ru/cgi-bin/B_price.pl? \ Category = Video & Description = abvg

Det är bättre att avkoda frågesträngen första gången själv. Till frågan "hur?" det finns många svar som det är meningslöst att skriva om. Här är bara ett kort exempel:

Ersätt (+) skyltarna med mellanslag

$ fråga = ~ s / \ + / / g;

Sedan ersätter vi alla kombinationer av tecknet (%), varefter de hexadecimala siffrorna följer, med motsvarande ASCII -tecken

$ fråga = ~ s /% ((2)) / pack ("C", hex ($ 1)) / t.ex.

Jag använder vad Perl Builder har att erbjuda:

#! E: \ perl5 \ bin \ perl # anropa get data -underrutinen $ Category = $ field ("Category"); # hämta data från kategorifältet $ Description = $ field ("Description"); # hämta data från beskrivningsfältet $ Page = $ field ("sida"); # hämta data från sidfältet

I slutet av manuset placerar vi en subrutin för "transparent" dataläsning.

Sub GetFormInput ((* fval) = @_ if @_; local ($ buf); if ($ ENV ("REQUEST_METHOD") eq "POST") (läs (STDIN, $ buf, $ ENV ("CONTENT_LENGTH")) ;) Annat ($ buf = $ ENV ("QUERY_STRING");) if ($ buf eq "") (return 0;) else (@ fval = split ( / & /, $ buf); gå efter $ i (0. . $ # fval) (($ namn, $ val) = split ( / = /, $ fval [$ i], 2); $ val = ~ tr / + / /; $ val = ~ s /% (.. ) / pack ("c", hex ($ 1)) / ge; $ name = ~ tr / + / /; $ name = ~ s /%(..)/ pack ("c", hex ($ 1) ) / ge; if (! definierad ($ field ($ name)))) ($ field ($ name) = $ val;) else ($ field ($ name). = ", $ val"; #if you want multi -väljer att gå in i en arrayändring till: # $ field ($ name). = "\ 0 $ val";))) return 1;)

Den andra etappen av manusets arbete - databehandling - är helt efter eget gottfinnande. Kontrollera att den mottagna informationen är korrekt, skriv den till en fil, gör vad du vill.

Och slutligen måste du ge några resultat till klientens webbläsare och så att webbläsaren visar dem korrekt. Det vill säga att du måste mata ut resultaten i HTML. Detta görs enkelt: (du kan också göra det på olika sätt)

Skriv ut "Innehållstyp: text / html", " / n / n"; # krävs radutskrift "

I fältet Kategori angav du: ", $ Category,"

Allt detta gäller skript som tar emot data från ett formulär på en HTML -sida. I det här fallet, sidan med formuläret - separat, manuset - separat. Du kan göra det vackrare och bekvämare: kombinera sidan och manuset till en enda helhet. För detta är manuset skrivet enligt schemat:

  1. Vid första lanseringen drar manuset en HTML -sida med ett formulär och en länk i ACTION -taggen till sig själv. Den första starten bestäms av frånvaron av indata.
  2. Om det finns ingångsdata tar vi emot dem, bearbetar dem och visar resultaten.

#! E: \ perl5 \ bin \ perl if (($ ENV ("QUERY_STRING") eq "") eller ($ ENV (CONTENT_LENGTH) = 0)) (# generera en sida med ett formulär) annars (# hämta data, bearbeta och mata ut resultatet)

Gästbok

Den allmänna algoritmen för gästboken är följande:

1. Om besökaren vill göra en post i boken, då
1.1 Skaffa data
1.2 Vi skriver dem till en fil eller till en databas
1.3 Vi säger tack i HTML och inbjuder dig att läsa andra inlägg
2. Om besökaren vill läsa posterna i boken, då
2.1 Läsa poster från en fil eller från en databas
2.2 Visa dem snyggt i HTML

För att underlätta uppfattningen designade jag artiklarna 1 och 2 med separata skript add_guestbook.pl respektive read_guestbook.pl. Gästbokmeddelanden lagras i textfil rad för rad, d.v.s. för varje post - en rad. Detta görs för att underlätta att läsa den här filen. Ett exempel på en post:

Lör 5 dec 13:31:20 1998 & Natasha & student & Bra & bra till en början. Jag önskar dig framgång inom detta område, Alexander! & No @ hittills & 194.226.60.34

Här är en beskrivning av fälten i den aktuella gästboken.

  • Namn - namn, efternamn, förnamn, smeknamn - efter besökarens gottfinnande
  • Arbete - yrke, yrke
  • RadioButton - tre knappar: gillade (bra), ogillade (dåligt), bryr sig inte (annorlunda)
  • Text - textrutan med kommentarer och anteckningar
  • E -post - returadress

Vanliga frågor om Perl för nybörjare

Vanliga frågor som samlats in i konferensen RU.CGI.PERL.CHAINIK Vad är CGI? den vanligt användargränssnitt gateways, som ansluter ett program som körs under kontroll av en webbserver och en klient i form av en HTTP -webbläsare. Med andra ord, det är ett verktyg som låter dig generera HTML -dokument "on the fly", beroende på förutsättningar och önskemål för programmeraren. Liksom alla klient / serververktyg består ett CGI -program av två delar - en som körs på klienten i en webbläsarmiljö och den andra som körs på en server i en webbservermiljö. Klientdelen är skriven i HTML (möjligen med hjälp av olika ytterligare verktyg som utökar dess kapacitet), serverdelen kan skrivas på alla programmeringsspråk som kan skapa körbara program på plattformen på vilken webbservern är installerad. Vi kommer att använda Pearl för dessa ändamål, eftersom det är bekvämt för bearbetning av textsträngar - och ett HTML -dokument är bara text. Gränssnittets princip är mycket enkel - webbservern, om den får göra det, kan starta det körbara programmet; i motsats till starten av samma program av användaren, kommer strömmen av inmatning, utmatning och fel i det pågående programmet att omdirigeras: inmatning och utmatning till HTTP -protokoll, och fel - till webbserverns felloggfil. Således kan vi skapa ett HTML -dokument "on the fly" genom att helt enkelt skriva ut dess taggar till utmatningsströmmen med hjälp av utskriftskommandot eller motsvarande. Det är dock bättre att se en gång än att höra hundra gånger. För att kunna arbeta med klient-server-program måste du först installera klienten och servern. Alla webbläsare som stöder HTTP -protokollet kan användas som klient (Netscape rekommenderas eftersom det reagerar ganska strikt på fel; du kan vara säker på att det som fungerar i det kommer att fungera var som helst - och motsatsen görs sällan), Apache -webbservern är rekommenderas som server. Detta är en av de mest utbredda webbservrarna, den kan kompileras för alla tänkbara plattformar och system, och alla leverantörer kan med stor sannolikhet installera program felsökade för det. Apache webbserver för Windows är bättre få det bara på ftp://cdl.bmstu.ru/soft/cgi. Installera det, men inte i katalogen som det erbjuder för installation, men i c: \ apache. Webbservern kan fungera även om den är inställd på root som standard, men när du konfigurerar den kommer det att finnas vissa avvikelser med alternativet som erbjuds här - om du vill undvika oönskade komplikationer ändrar du standardvägen. Starta webbservern (ett tomt svart fönster kommer att visas på skärmen - detta är ett normalt resultat av en lyckad start; i vilket fall som helst, stäng inte detta fönster med våld - webbservern har skapat en speciell ikon som du kan avsluta). Få åtkomst till den från en webbläsare via URL: en: http: // localhost och verifiera att demo -webbsidan i htdocs -katalogen fungerar. Om webbservern inte startar läser du felmeddelandet som visas. Oftast kan webbservern inte starta eftersom namnet inte är angivet. Öppna huvudserverns konfigurationsfil (httpd.conf) för redigering och avmarkera det flyttade servernamnet genom att tilldela servern valfritt namn - till exempel localhost. Nu är det vettigt att prova att köra ditt första CGI -program. För att kunna skriva CGI -program i Perl måste du installera Perl. Du kan få det på samma plats som webbservern, installationen av detta program innehåller inga speciella fallgropar. Du kommer att uppmanas att kompilera Pearl från C -texten, om du vägrar det (vilket rekommenderas) kommer den redan sammanställda binära versionen att distribueras. Efter installationen, glöm inte att lägga in Autoexec.bat -filen sökvägen till katalogen c: \ perl \ bin - där filen perl.exe finns. Kontrollera att Pearl är korrekt installerat genom att skriva ett enkelt program med en rad: skriva ut "Hej"; Kör detta program från valfri katalog genom att skriva "perl filnamn", där filnamn är namnet på filen som du angav ovanstående rad. Om ordet Hello visas på skärmen betyder det att du gjorde allt rätt. Till skillnad från många andra webbservrar kallar Apache själv Perl -tolkaren, så varje program måste ange var den ligger. Således bör den första raden i vårt CGI -skript vara vägen till tolkaren: #! perl efter att sökvägen till tolkaren har angetts måste du ställa in serverns http-rubrik som anger vilken typ av data som ska returneras: Observera att fältet http-headers slutar med en dubbel radmatning. Rubrikerna själva, om det finns flera av dem, separeras från varandra med en enda radmatning. Den tredje raden i vårt program kommer att innehålla den trim som är nödvändig för att skapa html -dokument: skriva ut " ";
skriva ut " ";
skriva ut " VLINK = \ "# 551A8B \"> \ n ";
Observera att när de används inuti utskriftskommandot måste dubbla citattecken undvikas - annars tar tolken citaten som slutet på kommandot och det som kommer efter dem som en ofullständig sträng och svarar med ett körfel. Nu måste du behålla en utdatarad och stänga html-dokumentet. skriva ut "Hej";
print "";
Således kommer hela vårt första program att se ut så här: #! perl
print "Innehållstyp: text / html \ n \ n";
skriva ut " ";
skriva ut " ";
skriva ut " \ n ";
skriva ut "Hej";
skriva ut "";
Kontrollera att dess körning är korrekt genom att köra programmet lokalt. För att göra detta, skriv in kommandoraden: perl filnamn, där filnamn är namnet på ditt program. Om allt är ok ska programmet skriva http -rubriken på skärmen och sedan taggarna för html -dokumentet som programmet skapar. Efter lokal kontroll du måste köra programmet som en klient-server-applikation. För att göra detta måste du ge programmet rätt att köra (för operativsystem där det är relevant) och placera det i den katalog där webbservern känner igen programmen som CGI -applikationer. Som standard är detta cgi-bin-katalogen där vårt program ska placeras. För att köra programmet, skriv dess URL i platsfönstret: http: // localhost / cgi-bin / filnamn Hur överför jag data mellan klienten och servern? Vi har redan diskuterat hur man överför data från servern till klienten. Nästa steg är överföring av data från klienten till servern och bildandet av klienten, med hänsyn till informationen som överförs till servern. Det finns flera METODER som kan användas för att överföra information till servern; de vanligaste är GET -metoden, som skickar data i URL: en och POST -metoden, som skickar data i begäran. Nackdelen med den första är den begränsade mängden överförd information (upp till 127 byte), nackdelen med vitro är svårigheten att skapa en begäran. För att bilda en begäran med GET-metoden är det tillräckligt att skriva ett frågetecken efter anropets URL och räkna upp "name = value" -paren genom ett ampersand: http: //localhost/cgi-bin/test2.cgi ? V1 = vasya & v2 = petya och så vidare. Nu måste du få denna data på servern, för vilken det är tillräckligt för att få innehållet i webbserverns miljövariabel QWERY-STRING. Denna variabel innehåller allt som kom efter frågetecknet i webbadressen. Det finns dock en funktion som gör det svårt att använda denna variabel. Faktum är att ryska bokstäver, liksom specialtecken, är låsta i URL: en, så de måste ersättas med en särskild kod som inte innehåller förbjudna tecken, och efter att ha tagits emot på servern kommer det att bli nödvändigt att koda dem. Sådan omkodning är ganska standard för CGI -programmering, och varje Perls kit innehåller en modul som kan läsa motsvarande variabel, koda om dess innehåll och bryta ner den mottagna data till variabler. Modulen som innehåller dessa rutiner kallas CGI. Anslut den till ditt program genom att skriva: använd CGI qw (param); varefter du kan ta vilken variabel som helst från ingångsströmmen genom att skriva, till exempel: $ v1 = param ("v1"); nu, om du kallade skriptet med ovanstående URL, kommer modulen att leta efter strömvariabeln "v1" i den mottagna data, och efter att ha hittat det kommer det att tilldela sitt värde till skalaren $ v1, som nu kommer att vara lika med "vasya" ". För att validera våra konstruktioner, låt oss köra ett program som illustrerar denna dataöverföring: #! perl
använd CGI qw (param);
$ v1 = param ("v1");
$ v2 = param ("v2");
print "Innehållstyp: text / html \ n \ n";
skriva ut " ";
skriva ut " ";
skriva ut " ";
print "Hej, $ v1, $ v2 !!!";
skriva ut "";

POST -metoden överför data i begäran, och den bör tas emot via programmets ingångsström (kom ihåg att när programmet startas av webbservern, dirigeras det till HTTP -protokollet). Formulär används för att skicka data med denna metod i HTML. Om vi ​​till exempel kör följande formulär på klienten får vi exakt samma resultat som i föregående exempel: <HTML>

http: //localhost/cgi-bin/test3.cgi>






CGI -modulen som behandlar inmatningsdata fungerar exakt samma med både GET -metoden och POST -metoden. Vanliga frågor (del två) Vissa material från "Perl FAQ skapad av SLY Golovanov, 2: 5020 / 794.13" används. Var kan jag få Perl -dokumentationen? Först lägger Perl till kommandot perldoc i ditt system under installationen. Kör den med perldoc -nyckeln (dvs perldoc perldoc) så kommer den att skriva hur du använder den. Kör perldoc för moduler<имя_модуля>och för interna funktioner perldoc -f<имя_функции>För det andra finns det några böcker om Perl på ryska: http://doc.marsu.ru/lang/perl/lama/ ftp://mshp.minsk.by/pub/incoming/lama.rar ftp: // ftp. kursknet.ru/pub/books/lama_perl.zip ftp://molly.wbt.ru/incoming/lama.rar http://simplex.ru/news/ Och på engelska: http: // solaris. inorg.chem. msu.ru/cs-books/perl/perlbookshelf.zip http://lpcs.math.msu.ru/CD_Bookshelf/Perl_content.tar.bz2 ftp://twilight.telco.md/pub/books/ perlbookshelf.zip http : //meltingpot.fortunecity.com/nj/80/cookbook.rar http://www.effectiveperl.com http://www.perlreference.com http://perlfect.com/articles/ http: // www. perlmonth.com/ http://www.stonehenge.com/merlyn/WebTechniques/ http://www.stonehenge.com/merlyn/UnixReview/ http://www.stonehenge.com/merlyn/LinuxMag/ http: // www.plover.com/~mjd/perl/#tpj http://home.od.ua/watman/perl/ http://spider.softclub.net/books/web/ http: // athena .vvsu.ru : 85/docs/unix/http://athena.vvsu.ru:85/docs/tcpip/ http://athena.vvsu.ru:85/docs/www/ %%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %%% Och här kan du ta färdiga skript mest för olika ändamål: www.script.ru www.codemanual.com %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% kompletteringskodnummer 500 (internt serverfel)? 1. Försök att köra programmet lokalt genom att skriva kommandoraden: perl filnamn(där filnamnet är förstår du vad). Observera att om du arbetar i ett Unix-system, där det förutom den femte pärlan du installerade förmodligen också finns en inbyggd fjärde, och inte det faktum att den ligger senare på banorna, är det vettigt att skriva perl5 filnamn eftersom den femte perlen vanligtvis har ett sådant alias. Ett försök att köra program med objektmoduler (som inkluderar CGI -modulen) i Perl 4 kommer att leda till fruktansvärda konsekvenser. Om programmet kunde starta, titta på de felmeddelanden som det genererar. Observera att ENDAST det första av de diagnostiserade felen kan korrigeras (resten kan svävas). 2. Om programmet körs lokalt men inte startas av servern, kontrollera om programmet ställer in HTTP -rubriken korrekt, vilket anger utmatningstypen. För att generera HTML -dokument ska det vara så här:
Se till att en sådan rad finns i ditt program innan du skickar ut något tecken till HTTP -strömmen. Enkelt uttryckt måste detta utskriftskommando utföras före något annat utskriftskommando. 3. Om detta inte fungerar kontrollerar du om Perl du ringer till. På många UNIX -system ligger den fjärde Perl längs vägen: / usr / local / perl och den femte på vägen: / usr / local / bin / perl För säkerhets skull, se till att den femte Perl är installerad på systemet alls. 4. Om detta inte hjälper, försök att komma ihåg om filen med ditt skript gick igenom textredigerare från Windows. Detta är naturligtvis bara relevant om du kör skriptet på ett Unix -system. Poängen är att Windows och Unix har olika end-of-line-tecken. Alla inbyggda Windows -redigerare fungerar på Windows standardlinjeändelser, och Unix kan inte köra en sådan fil. För att bekämpa denna effekt rekommenderas antingen att skapa och redigera filer endast på Unix-system, eller att skapa och redigera dem endast i Windows med den inbyggda redigeraren för FAR-chefen, som låter dig välja vilken filtyp som ska skapas genom att trycka på shift-F2. Som standard använder den här redigeraren de radändelser som redan finns i filen (det vill säga en fil som skapats i UNIX kan sparas "som den är" utan att tänka på dess typ). Om ditt skript redan har skapats i Windows standard, och du vill köra den på Unix, använd till exempel följande program: $ v1 = "\ x0d";
öppna A, "f1";
medan ($ rad = )
{
$ line = ~ s / $ v1 // g;
$ itog. = $ rad;
}
stäng A;
öppna B, "> f1";
tryck B "$ itog";
stäng B;
Detta program öppnar för att läsa en fil med namnet f1 på startplatsen, läser därifrån alla rader och ersätter slutet på var och en av dem. Efter läsning öppnar programmet samma fil som en ny för skrivning och skriver resultatet till den. 5. Som en sista chans - kontrollera om skriptet har läst och kör behörigheter från den användare som webbservern körs från. Nej, du tittar fortfarande på det. Om detta inte hjälper dig, skriv till konferensen. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Hur kan jag se alla miljövariabler för en webbserver som för närvarande är aktiva? för (nycklar%ENV) (skriv ut "$ _ = $ (ENV ($ _)) \ n") %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Vad är nycklar (cookies) och vad är de till för? Nycklar är ett sätt att öppna en fil på klientens hårddisk. Eftersom en sådan fil är ett potentiellt virus måste denna procedur vara ordentligt säkrad på webbläsarnivå. Nyckeln kan installeras under hela webbläsarens livstid eller under en viss period. För den första typen av nycklar behöver du inte ange den tidpunkt då nyckeln ska raderas; för den andra typen måste du ange denna tid och i ett format som är tillgängligt för webbläsaren. Om webbläsaren inte kan ställa in datumet i sin kalender när nyckeln ska tas bort, raderas den första gången programmet stängs. För att automatisera processen för att sammanställa datumet tillämpas ett förfarande som anger datumet en månad före nuvarande ögonblick: sub get_cookie_date (
min (@day, @mon, $ i, $ count, $ sec, $ min, $ hours, $ mday, $ mon, $ year, $ wday, $ yday,
$ isdst, $ resultat);
($ sek, $ min, $ timmar, $ mday, $ mån, $ år, $ wday, $ yday, $ isdst) = gmtime (tid + 2592000);
@day = ("söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag",
"Lördag");
@mon = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
"Nov", "Dec");
om ($ år> = 100) (
$ år = $ år - 100;
om ($ år< 10){$year = "0$year";}
}
$ resultat = $ dag [$ wday]. ",". $ mday. "-". $ mån [$ mån]. "-". $ år. "
". $ timmar.": ". $ min.": ". $ sek." GMT ";
returnera $ resultat;
}
Glöm inte att lägga in någon skalär sökvägen till ditt program från roten till motsvarande serverområde. Programmets namn behöver inte anges, det kommer att överföras separat. Till exempel: $ path = "/ cgi-bin";
Nu kan du alltid installera nyckeln genom att köra följande kod i ditt program: $ date = get_cookie_date ();
print "Set-Cookie: login = $ log; path = $ path; löper ut = $ date \ n";
print "Set-Cookie: lösenord = $ pas; sökväg = $ sökväg; löper ut = $ datum \ n";

För att läsa nyckeln finns också ett särskilt förfarande: sub get_cookie (
min (% cook, @temp, $ i, $ count, $ key, $ value);
(@temp) = split ( /; /, $ ENV ("HTTP_COOKIE"));
[e -postskyddad];
för ($ i = 0; $ i<$count; $i++){
$ temp [$ i] = ~ s ///;
($ key, $ value) = split ( / = /, $ temp [$ i]);
$ cook ($ key) = $ värde;
}
retur% kock;
}
Efter det kan du få nyckelvärdet, till exempel så här: if ($ ENV (HTTP_COOKIE)) ($ cookies = 1;% cookies = get_cookie ();)
annat ($ cookies = 0;)
if ($ cookies == 1)
{
$ login = $ cookies ("inloggning");
$ pass = $ cookies ("lösenord");
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
fil från nätverket? Det enklaste sättet är att installera libwww -modulen på ditt system, vilket gör att du kan göra detta. Här är ett exempel på hur du använder det:
#! / usr / local / bin / perl
använd LWP :: UserAgent;
använd CGI qw (rubrik);
min $ URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";
min $ res = LWP :: UserAgent-> new-> request (ny HTTP :: Request GET => $ URL);
binmode (STDOUT);
skriva ut $ res-> innehåll;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % till servern? För att göra detta måste du använda Multipart -kodningen för postmetoden, det låter dig överföra även binära filer till servern, och deras storlek är inte begränsad. Tyvärr stöder inte alla webbläsare denna kodning. Netscape har behållit det sedan den andra versionen, MSIE sedan version 3.02. Här är ett exempel med denna metod: #! / usr / local / bin / perl
använd CGI qw (param);
$ mode = param ("mode");
$ file = param ("file");

# katalog där den mottagna filen är skriven.
$ fup = " / enorm / httpd / htdocs / ufo / up";
if ($ mode eq "upload")
{
print "Innehållstyp: text / html \ n \ n";
@ name = split ( / \\ /, $ file);
@ namn = omvänd (@namn);
($ file1) = @name;
$ file_new = "$ fup /"."$ fil1";
öppna A, "+> $ file_new";
binmode A;
binmode $ fil;
medan ($ bytesread = read ($ file, $ buf, 1024))
{
print A $ buf;
}
stäng A;
skriva ut " ";
skriva ut " ";
print "Filen har överförts till servern.
";
skriva ut "

";
skriva ut " ";
skriva ut " ";
skriva ut " ";
skriva ut "
";
skriva ut "
";
skriva ut "";
skriva ut "";
}
elsif ($ mode eq "")
{
print "Innehållstyp: text / html \ n \ n";
skriva ut " ";
skriva ut " ";
skriva ut "

En varning. Filöverföringsprogrammet fungerar inte från webbläsaren
Internet Explorer -versioner under 3,2 "; skriv ut"

action = \ " / cgi-bin / upload.cgi \" enctype = \ "multipart / form-data \"
namn = \ "ladda upp \"> ";
skriva ut "
Ladda upp fil:
";
skriva ut " ";
skriva ut "
";
skriva ut "
";
skriva ut "
";
skriva ut "
";
skriva ut "";
skriva ut "";
}
Vanliga frågor (del tre) Hur man skickar ett brev (i UNIX-system). För att arbeta med post på UNIX -system används Sendmail -programmet traditionellt. Du kan komma åt den direkt, eller så kan du använda e -postkommandot. Under alla omständigheter måste du först förbereda adresserna genom att ersätta " @" -symbolen med "\ @" i dem - annars kan programmet inte köras. $ as1 = "@";
$ as2 = "\ @";
$ mail = ~ s / $ as1 / $ as2 / g;
där $ mails är en adress eller en serie adresser, separerade med mellanslag. Bokstäver skickas traditionellt i koi-8-kodningen, till vilken vi behöver översätta vår text. Detta kan göras genom att skriva texten till brevet, säg, till skalaren $ as4 och sedan utföra följande operation på dem (för att översätta från 1251-kodning till koi-8-kodning): $ as4 = ~
tr / ABVGDEZHZYKLMNOPRSTUFKHTSZHSCHYEYUAabvgdezhziyklmnoprstufkhtschshshch'yueyueYo / bvchzdets'y
klmnoprtufkhzhigyuyueyashshasBVChZDETSJYKLMNOPRTUFHZHIGYUYAYASCHSHASi? /;

Öppna MAILL, "| mail -s \" Subject \ "$ mails";
# Skalaren för $ mails listar alla adresser åtskilda av ett mellanslag
skriv ut MAILL "$ as4"; # det här är brevets kropp
stäng MAILL; Med programmet Sendmail kan du skicka e -post enligt följande: open (MAIL, "| / usr / lib / sendmail -f $ from_addr $ mails");
print MAIL "Ämne: ämne_text \ n";
skriv ut MAIL "innehållstyp: text / html; teckenuppsättning = koi8-r \ n \ n";
print MAIL "Till: $ användare<$to_addr>\ n "; # Vilken adress du ska svara på.
skriv ut POST "$ as4";
stäng MAIL;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % brev? Det enklaste sättet är att använda postbiblioteket. #! / usr / local / bin / perl
använd Mail :: POP3Client;
$ pop = new Mail :: POP3Client ("inloggning", "lösenord", "mail.server.ru");
för ($ i = 1; $ i<= $pop->Räkna; $ i ++) (
$ bbb = $ pop-> Body ($ i);
$ aaa = $ pop-> Huvud ($ i);
foreach ($ pop-> Head ($ i)) ( / ^ (Från | Ämne): / och skriv ut $ _, "\ n";)
# $ pop-> Radera ($ i); # så här raderas ett läst brev
skriva ut "$ aaa \ n";
skriva ut "$ bbb \ n";
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Kulchenko ( [e -postskyddad]), uppdaterad 04/04/2000 Detta är en beskrivning av LWP -modulen (ibland kallad LibWWW), som innehåller många mycket användbara funktioner. ===================================================== =================== 1.1. Hur får man textfil (http, ftp)? 1.2. Hur får jag filen jpeg / gif / bmp och returnerar den? 1.3. Hur får jag åtkomst till en lösenordsskyddad fil? 1.4. Hur ställer jag in REFERER och andra HTTP -huvudparametrar? 1.5. Hur får jag angiven del av filen (första MAXSIZE byte)? 1.6. Hur får jag och ställer in cookies? 1.7. Hur anger jag proxyservrar? 1.8. Hur kontrollerar jag om omdirigering? 1.9. Hur skapar jag parametrar för POST -metoden? ===================================================== =================== 1.1. Hur får man textfil (http, ftp)? Hur man får en fil via http eller ftp använd LWP :: UserAgent;

Min $ URL = " http://www.yahoo.com/";
min $ res = LWP :: UserAgent-> new-> request (ny HTTP :: Request GET => $ URL);
skrivhuvud, $ res-> är_success? $ res-> innehåll: $ res-> status_line;
===================================================== =================== 1.2. Hur får jag filen jpeg / gif / bmp och returnerar den? Hur man får en bild. använd LWP :: UserAgent;
använd CGI qw (header -no_debug);
$ URL = "
http://a100.g.akamaitech.net/7/100/70/0001/www.fool.com/art/new/butts/go99 .
gif ";
min $ res = LWP :: UserAgent-> new-> request (ny HTTP :: Request GET => $ URL);
binmode (STDOUT);
skriva ut $ res-> är_success? (header ("image / gif"), $ res-> content)
: (header ("text / html"), $ res-> status_line);
===================================================== =================== 1.3. Hur får jag åtkomst till en lösenordsskyddad fil? Hur man anger ett lösenord. BÖRJA (
paket RequestAgent;
använd LWP :: UserAgent;
@ISA = qw (LWP :: UserAgent);

Sub new (LWP :: UserAgent :: new (@_);)
sub get_basic_credentials (returnera "användare", "lösenord")
}
använd CGI qw (header -no_debug);

Min $ res = RequestAgent-> new-> begäran (ny HTTP :: Request GET => $ URL);
skrivhuvud, $ res-> är_success? $ res-> innehåll: $ res-> status_line;
===================================================== =================== 1.4. Hur ställer jag in REFERER och andra HTTP -huvudparametrar? Hur man ställer in sessionsmiljövariabler. använd LWP :: UserAgent;
använd HTTP :: Headers;
använd CGI qw (header -no_debug);

Min $ URL = " http: //localhost/cgi-bin/hello.cgi ";
min $ res = LWP :: UserAgent-> new-> request (
ny HTTP :: Begär (
GET => $ URL,
ny HTTP :: Headers referer => "
http://www.yahoo.com "),
);
skrivhuvud, $ res-> är_success? $ res-> innehåll: $ res-> status_line;
===================================================== =================== 1.5. Hur får jag angiven del av filen (första MAXSIZE byte)? Hur man får en del av en fil. använd LWP :: UserAgent;
använd CGI qw (header -no_debug);

Min $ URL = " http://www.yahoo.com/ ";
min $ MAXSIZE = 1024;

Skrivhuvud;
min $ res = LWP :: UserAgent-> new-> request (
ny HTTP :: Begäran (GET => $ URL), \ & återuppringning, $ MAXSIZE);

Subåteruppringning (min ($ data, $ svar, $ protokoll) = @_; skriv ut $ data; dö)
===================================================== =================== 1.6. Hur får jag och ställer in cookies? Hur man installerar och läser nyckeln. använd LWP :: UserAgent;
använd CGI qw (header -no_debug);
använd HTTP :: Cookies;

Min $ URL = "http://mail.yahoo.com/";

Min $ ua = ny LWP :: UserAgent;
min $ res = $ ua-> begäran (ny HTTP :: Begäran GET => $ URL);
min $ cookie_jar = ny HTTP :: Cookies;
$ cookie_jar-> extract_cookies ($ res);

Skrivhuvud;
if ($ res-> is_success) (
min $ req = ny HTTP :: Begäran GET => $ URL;
$ cookie_jar-> add_cookie_header ($ req);
$ res = $ ua-> begäran ($ req);
skriva ut $ res-> är_success? $ res-> as_string: $ res-> status_line;
) annat (
skriv ut $ res-> status_line;
}
===================================================== =================== 1.7. Hur anger man proxyservrar? Hur man arbetar genom en proxy. använd LWP :: UserAgent;
använd CGI qw (header -no_debug);

Min $ URL = " http://www.yahoo.com/ ";
min $ ua = ny LWP :: UserAgent;

$ ua-> proxy (["http", "ftp"], " http://proxy.sn.no:8001/ ");
$ ua-> proxy ("gopher", "
http://proxy.sn.no:8001/ ");

Min $ res = $ ua-> förfrågan (ny HTTP :: Begäran GET => $ URL);
skrivhuvud, $ res-> är_success? $ res-> innehåll: $ res-> status_line;
===================================================== =================== 1.8. Hur kontrollerar jag om omdirigering? Hur man omdirigerar använd LWP :: UserAgent;
använd CGI qw (header -no_debug);

Min $ URL = " http://www.yahoo.com/ ";
min $ res = LWP :: UserAgent-> new-> request (ny HTTP :: Request GET => $ URL);

Skrivhuvud;
skriv ut $ res-> request-> url om $ res-> föregående-> är_redirect;
===================================================== =================== 1.9. Hur skapar jag parametrar för POST -metoden? Hur man skickar en begäran med POST -metoden utan att använda ett formulär. använd URI :: URL;
använd HTTP :: Request;
använd LWP :: UserAgent;
använd CGI qw (header -no_debug);

Min $ URL = " http://yahoo.com/?login=mylogin&password=mypassword ";
min $ uri = ny URI $ URL;
min $ metod = "POST";

Min $ begäran;
if (uc ($ metod) eq "POST") (
min $ fråga = $ uri-> fråga;
(min $ url = $ uri-> as_string) = ~ s /\? $ fråga $ //;
$ request = new HTTP :: Request ($ method, $ url);
$ request-> header ("Content-Type" => "application / x-www-form-urlencoded");
$ request-> content ($ query);
) annat (
$ request = new HTTP :: Request ($ method, $ uri-> as_string);
};

# lägg till värdfält som krävs i HTTP / 1.1
$ request-> header (Host => $ uri-> host_port) if $ uri-> schema ne "fil";

Min $ res = LWP :: UserAgent-> new-> request ($ request);

Skrivhuvud, $ res-> är_success? $ res-> innehåll: $ res-> status_line;
====================================================================

Allt det följande gör inte på något sätt anspråk på att vara fullständigt och pålitligt.

Jag vill på förhand varna dig för att den här artikeln inte kommer att göra dig till en super PERL -programmerare, men det kommer att ge dig några nödvändiga initial information som hjälper dig i den vidare studien av detta intressanta programmeringsspråk.

Jag bestämde mig för att skriva den här artikeln efter att jag fått reda på hur svårt det är att "skära" i allt, även om du har någon PERL -manual till hands. Överallt, redan i början, börjar de hänvisa till några mystiska termer och kommandon, och allt du behöver göra är att blinka förvånat, eller (om du fortfarande förstår något) få dessa program att fungera (inte "som det ska" ", men i allmänhet!). Den här artikeln skulle kunna kallas "PERL for Dummies" om den täckte allt material, men här satte jag mig som mål att ge dig bara de nödvändiga inledande begreppen, och så att säga "förbered dig på ytterligare strider" :). Även om det är fullt möjligt att i framtiden, "på arbetarnas begäran", kommer denna lilla artikel att växa till något mer.

Så ... låt oss komma igång!

Låt mig först berätta att PERL måste installeras på din dator. Några av mina vänner hoppade helt över den här till synes enkla operationen, och efter att ha skrivit ett enkelt program försökte de köra det länge ...;) De flesta tillgängligt paket PERL (enligt min mening) är ActivePerl, även om det här paketet riktar sig till Windows -användare, och om du har UNIX kan du ladda ner något inbyggt från www.perl.com. Hur som helst kommer du att få och installera perl för dig själv (om du inte redan har gjort det). Så: du kommer att ha en ny pappa "perl", men det betyder inte att alla program behöver placeras där :) Perl, som sitter där, utför bara alla dina geniala skapelser med tillägget * .pl och var de är själva - en användare vet :) (sant för Windows -användare med ActivePerl -paketet installerat, eftersom det associerar * .pl -filer).

Eftersom Eftersom denna artikel främst är avsedd för Windows -användare anser jag mig vara skyldig att berätta att för program som körs på detta operativsystem är det inte alls nödvändigt att starta varje program från raden:

#! / usr / bin / perl

Saken är att det här språket skapades på grundval av UNIX OS, och de försöker överföra denna linje till oss som ett "arv" från deras operativsystem. Du bör dock komma ihåg att UNIX också kan installeras på servern (om du bestämmer dig för att släppa dina program där).

Nu lite om skrivmetoden.
Jag råder dig att börja använda en enkel anteckningsblock för att komma ihåg alla kommandon och programmeringssyntax. I framtiden kan du använda någon form av redaktör, men det här är inte längre sport :), och ännu mer oönskat för dem som bara bekantar sig med detta programmeringsspråk och programmering i allmänhet.

Nästan alla självstudier på detta språk börjar med det enklaste programmet, som ser ut ungefär så här:

print ("hej, VÄRLD! \ n");

Några av er har förmodligen redan kopierat det givna programmet till din fil och märkt att det öppnas snabbt och stängs lika snabbt. Detta beror på att programmet är ett program, och efter att det har körts stängs det omedelbart, så lägg till en rad till i programmet med följande innehåll:

Som ett resultat kommer allt detta att ta följande form:

print ("hej, VÄRLD! \ n");
<>;

Det ser inte så lätt ut för de oinvigde ... Till och med lite läskigt ... Men det här är bara för de oinvigde, faktiskt är allt ingenstans lättare! :) kan inte tro det? Jag ska bevisa det nu.
Först måste du veta att utskrift är ett kommando som skriver ut information till standardutmatningen STDOUT (STanDart OUT eller, med andra ord, utmatning till bildskärmen).
För det andra är obegripligheten i form av \ n en ny rad, men inte program, som vissa kan vara rädda för, men information på skärmen, d.v.s. om du fortsatte texten med citattecken, skulle det efter det tecknet skrivas ut på en ny rad. Och om du behöver använda ett snedstreck (skal :) i själva texten måste du lägga ett skal till framför det. Till exempel:

skriv ut "\ a"; # Kommandot efter vilket Perl # skriver ut en signal till SPICER -utskrift "\\ a"; #Perl skriver bara ut \ a

Då vill jag glädja dig: nafig -parenteser behövs inte :) Användningen av dem beror helt på ditt humör, även om manualerna säger att detta förmodligen hjälper till att markera texten i programmet. I allmänhet - som du gillar det mer ...
Som du säkert redan gissat - citat behövs för att bifoga texten i dem, så det finns två obegripliga punkter kvar. Men innan jag tänker på dem anser jag att det är nödvändigt att förklara för dig vilken information som finns i Perl.
Den grundläggande informationsenheten i Perl är en skalär, d.v.s. ett separat värde lagrat i en separat variabel.

$ a = "hej, värld!"; # Tilldela variabeln $ a lite text
$ b = 777; # Tilldela ett nummer till $ b

Dessa variabler lagrar strängar, siffror och referenser. Det är nödvändigt att förstå skillnaden mellan talen som sådana och siffrorna i strängen.

$ abc = "123"; # Antal i rad
$ 123 = 123; # Själva numret

Om du behöver ett tal för beräkningar, lägg bara inte dubbla citattecken.

Semikolonet i slutet av varje rad är faktiskt ... slutet på raden, från vilket det följer att du kan skriva hela programmet på en rad, men vi är ledsna för raderna :) Det finns ett undantag från ovanstående : # -tecknet säger om att allt som står i raden efter det är en kommentar, och inte längre gäller programmet.
Rhombus tecken<>- detta är standard eller, på vanligt språk - standardinmatning från bildskärmen (jag förklarar: en begäran visas på monitorn, och du går naturligtvis in via tangentbordet. Tryck sedan på enter och det angivna värdet finns redan i Perl -variabeln, om det har ställts in). Hela tricket med att lägga till denna diamant i vårt fall är att den kommer att be dig om denna ingång tills du trycker på "enter" -knappen, och eftersom programmet inte anger vad du ska göra med denna ingång, kommer perl helt enkelt att glömma det och kommer att betrakta vårt program slutfört. Och som ett resultat av genomförandet av detta program kommer vi att se texten Hej, värld! ...

Låt oss nu komplicera vårt program lite:

print "ange ditt namn:";
$ namn =<>;
print "hej $ namn!";
<>;

Du bör förstå att program körs rad för rad, dvs. först den första raden, därefter den andra osv.

Så på den första raden visar vi en uppmaning att ange ett användarnamn. På den andra raden läser vi in ​​den i $ name -variabeln. $ -namnet är som nämnts en Perl -skalärvariabel som börjar med ett dollarstecken. Ser jag framåt kommer jag att berätta att förutom variabler som börjar med en dollar finns det också matriser (@array), hash (% hash) och några fler typer, som är för tidiga att prata om. Det finns jämlikhet mellan variabeln och diamanten, vilket innebär att vi tilldelar variabeln resultatet av frågan. På den tredje raden skriver vi ut ordet hej, och efter det skriver vi ut det som lagrades i variabeln $ name. I vårt fall är detta namnet vi bad om.

Låt oss göra en annan distraktion, där jag kommer att berätta vad du kan göra med variabler ... Du kan göra ALLT med dem! Och detta är inte en överdrift. Till exempel är detta möjligt:

$ a = 3;
$ b = 4;
$ c = $ a + $ b; # Lägg till två variabler och
# tilldela dem till tredje
skriva ut $ c; # Skriv ut det resulterande numret
skriva ut $ a + $ b; # samma, bara utan
# åberopar den tredje variabeln

Jag hoppas att allt är klart med detta ... Under tiden kommer det till några, vi kommer att skriva ett program som kör DOS dir -kommandon. För dem som inte vet - dir är ett kommando som visar innehållet i katalogen där du befinner dig.

$ dos = `dir`;
skriva ut $ dos;
<>;

Detta program läser in i $ dos -variabeln resultatet av dir -kommandot, som är inneslutet i bakre citattecken (om det vore enkla citat, skulle det inte vara ett kommando, utan bara ett ord) och visar sedan samma resultat på monitorn.

Låt oss nu återvända till våra ramar, eller snarare bara till ramarna hittills :) Vi lärde oss att visa texten vi behöver på skärmen, ta emot information från användaren och lärde oss också att DOS -kommandon i back citat kommer att köras som DOS -kommandon :) Det är dags att skriva ett program som inte ber om mer än samma kommandon:

print "ange kommando:";
chmod ($ com =<>);
skriv ut `$ com`;
<>;

Av säkerhetsskäl avråder jag starkt från att ange FORMAT -kommandot, gissa varför :) chmod -kommandon(). Detta kommando tar bort nyradstecknet \ n från den information som vi får i begäran, som finns där som standard. Det som står på den andra raden är en stenografi -notation för två rader:

Vi gissar bara några symboler med detta, men det är fortfarande trevligt :)

På detta tror jag att du har klarat de första stegen och är redo att fortsätta den taggiga vägen att lära sig Perl.

Det händer så att jag känner minst två personer som skulle vilja lära sig Perl. Speciellt för dem bestämde jag mig för att skriva detta inlägg.

  • Del 1: Typer av variabler (du läser den här delen)

I den hittar du exempel på enkla program från serien "skriv ut siffror från 1 till 5" och liknande. Jag har alltid tyckt om att lära av exempel - det är mer intressant och snabbare än från böcker eller seminarier. Du kan också titta på inläggen i den här bloggen - chansen är stor att du hittar fler exempel i dem.

Jag antar att på skolan / institutet har du studerat Pascal / Delphi, C eller åtminstone Basic, och du behöver inte förklara vad en funktion och loopar är. Om så inte är fallet är det okej, bara för att ta reda på allt måste du lägga extra tid på att läsa Wikipedia. Om du inte vet hur du kör ett bash -skript, eller varför, på första raden i manuset, skriver du något liknande #! / bin / sh, du måste googla lite för att ta reda på det.

Speciellt för dem som är intresserade av frågorna, "är det sant att Perl är väldigt svårt", "vilka böcker om Perl kan du ge råd" och till och med "eh ... och vad skriver de mer i det?", Skrev jag en mini-FAQ om Perl som du kan läsa på HabraHabr. Och för dem som utan kraft många bokstäver här kommer jag att ge en kort sammanfattning av det:

  • Perl - modernt språk programmering där de skriver och kommer att skriva under mycket lång tid.
  • Perl, liksom alla andra programmeringsspråk, har sina fördelar, nackdelar och användningsområden. Existerar riktigt stor en klass problem som Perl löser för 5+.
  • Perl -syntax är inte mer komplex än C ++ eller Java -syntax. Du kan bli övertygad om detta genom att läsa detta inlägg till slutet.
  • Det finns bra och billiga Perl -handledning där ute. Även på nätet kan du enkelt hitta en gemenskap av perl-programmerare som talar ditt modersmål.
  • Perl fungerar bra både under operativsystem UNIX -familjen och under de onda fönstren.

Tillägg: Jag rekommenderar också att du kolla in Perl vs Python vs Ruby vs PHP och programmeringspräster. Den första berättar om olika prestanda skriptspråk, det andra handlar om skillnaden mellan PHP och andra språk. Python -fans uppmuntras att läsa inlägget Python Scripting Performance Test. Jag hoppas att dessa material hjälper dig att hitta svaret på frågan "vad är bra med Perl".

Hej% användarnamn%!

Så låt oss redan skriva vårt första Perl -manus!

#! / usr / bin / perl

$ namn = skift ();
print ("Hej, $ namn! \ n ") ;

Kör skriptet:

$ chmod u + x 1 .pl
$ ./ 1 .pl afiskon
Hej, afiskon!

Allt är väldigt enkelt här:

  • Namnen på skalvariabler (det vill säga inte matriser och inte hascher, vad är de - se nedan) börjar med ett dollarstecken.
  • Skiftfunktionen returnerar nästa argument till skriptet. Med andra ord returnerar det första samtalet för att skifta () det första argumentet, det andra samtalet returnerar det andra och så vidare.
  • Funktionen print () skriver ut strängen som skickas som ett argument.
  • Du kan ersätta variabelvärden i strängen (se rad 4). Mer om strängar - se nedan.

Om det ännu inte är mycket klart - det är okej. Kanske kommer lite teori att ge lite mer klarhet.

Variabla typer

Det finns tre huvudtyper av variabler i Perl: skalar(nummer och strängar), matriser- liknande dem som används i Pascal eller C (ibland kallas även matriser vektorer), och hascher(associativa matriser).

Skalarer vi har redan använt i föregående exempel. Här är några fler exempel på hur man definierar skalarer.

#! / usr / bin / perl

$ a = 123;
$ b = - 7,496;
$ c = 0xABC; # är 2748, ja, det är en kommentar :)
$ d = ($ a + $ b) / $ c;
$ d * = $ a; # samma som $ d = $ d * $ a;

$ str1 = "hej";
$ str2 = "$ str1, värld"; # $ str2 innehåller "hej, värld"
$ str3 = $ a. " \ n "... $ str2;
$ str4 = "$ str1"; # $ str4 innehåller "$ str1", inte "hej"

Här sätter vi positiva och negativa, hela och bråktal, ställ in siffran i hexadecimal kodning, lägg till, multiplicera och dela - allt är som i C eller Java. Förutom de listade verksamheterna stöder Perl också exponentieringsoperationen:

$ a = 2 ** 8; # resultat: 256

Med strängar är allt ungefär detsamma som i vissa PHP. Perioden betyder drift av sammanfogning (det vill säga "sammanfogning" av strängar), om strängen innehåller variabelnamn ersätts värden i stället med ett snedstreck kan du infoga nya rader (\ n), flikar (\ t), citattecken (\ "), bakåtstrecket (\\) i sig är ett dollarstecken utan att någon variabel (\ $) måste bytas ut. Om en sträng är i enstaka citat behandlas tecknen i den" som den är " , utan variabel substitution, etc.

Precis som PHP tolkar Perl skalarer som tal eller som strängar, beroende på operation. Det är enkelt:

$ int1 = "11" + 22;
# ^ strängen "11" konverteras till ett tal,
# följt av tillägg, resultat: 33.
$ str1 = "11". 22;
# ^ talet 22 konverteras till en sträng,
# varefter sammankopplingen utförs är resultatet "1122".

Reglerna för att konvertera från sträng till tal och vice versa är desamma som i PHP:

$ str1 = 0. "abc";
# ^ resultatet är "abc", nummer noll konverteras till tom sträng
$ int1 = "aaa" + 1;
# ^ resultat - 1, raden "aaa" har inga siffror
$ int2 = "12aaa" + 1;
# ^ resultat - 13, endast de första siffrorna i strängen beaktas

Förresten, det finns speciella operatörer för att deklarera långa strängar - q och qq:

# liknande enkla citat
$ text = q (
Har du $ 15?
} ;
# liknar dubbla citat
$ meddelande = qq (
Hej, $ användarnamn!
Hur mår du?
} ;

Arbetar med matriser sker enligt följande:

#! / usr / bin / perl

$ scalar = "bebebebe";
($ a, $ b) = (1, 2); # samma som $ a = 1; $ b = 2;
@arr = ("aaa", 123, $ scalar, $ a + $ b);
skriv ut $ arr [1]. " \ n ";
push @arr, $ a;
print pop (@arr). " \ n ";

Här skapar vi en @arr -array med 4 element (rad 5). Sedan visar vi det andra elementet (rad 6). Numreringen av elementen börjar från noll, så index 1 används för att visa det andra elementet. Sedan sätter vi värdet på variabeln $ a ( push -funktion, rad 7) och hämta och visa den omedelbart (funktionspop, rad 8).

Var uppmärksam, namnen på matriserna börjar med "hund", inte dollarn (det är inte svårt att komma ihåg - motsvarande symboler liknar de första bokstäverna i de engelska typnamnen: $ - scalar, @ - array). Vid åtkomst till det andra elementet i arrayen (rad 6) användes dollarstecknet eftersom elementet i arrayen är en skalär. Detta orsakar mycket förvirring först, men i allmänhet är allt logiskt.

Även i detta skript kallar vi utskrifts- och push -funktionerna utan parenteser. I Perl, när du anropar en funktion, där den inte är tvetydig, kan parenteserna utelämnas.

För att deklarera en matris vars element är strängar utan mellanslag finns det en speciell operator - qw:

@arr = qw / aaa bbb ccc /;
# liknande ("aaa", "bbb", "ccc"), men kortare

Hashesär som matriser, men elementen i haschen är inte ordnade. I det här fallet kan strängar användas som nyckeln genom vilken elementet nås.

#! / usr / bin / perl

% hash = ( # när du deklarerar hash och matriser kan du
"x" => 12, # använd radbrytningar
y => 53, # om det inte finns några specialtecken i nyckeln behövs inga citattecken
"z" => - 10,5, # komma i slutet kan lämnas
) ;

$ hash ("x") ++; # x -koordinaten är nu 13
$ hash (y) -; # y-koordinat är nu 52

# visningskoordinater
skriva ut "x = $ hash (x), y = $ hash (y), z = $ hash (z) \ n";

Hashnamn börjar med ett procenttecken och används för att hänvisa till ett objekt. tandställning(inte kvadratisk, som är fallet med matriser). Om du känner till nyckelns namn i förväg kan du ange det utan citattecken (rad 10).

Förresten, variablerna $ test, @test och% test är helt oberoende variabler av olika typer.

Vid den här tiden ville jag gå till villkorade operatörer och för / stund slingor, men jag insåg att det redan var lite för mycket för ett inlägg med text. Samtidigt förblev många frågor bakom kulisserna:

  • Villkorliga operatörer;
  • För och medan slingor;
  • Funktionsdeklaration;
  • Arbeta med strömmar och filer;
  • Strikt syntax;
  • Använda färdiga moduler och klasser.

Jag kommer att skriva om detta i en av följande anteckningar. Jag skulle vilja få minst ett par kommentarer till det här inlägget - intressant / ointressant, begripligt / obegripligt osv. Förresten, om du har några Perl -relaterade frågor (inte nödvändigtvis med detta inlägg) - ställ dem gärna i kommentarerna!

Förhoppningsvis hjälper denna serie inlägg om Perl -programmering dig att skriva dina första enkla manus. Med tiden kommer skript att bli mer komplexa, de kommer att använda ny teknik (OOP, reguljära uttryck) och efter ett tag kommer du att upptäcka att du vet tillräckligt om Perl för att dela din erfarenhet med andra.







2021 gtavrl.ru.