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:
- tar emot data
- behandlar data
- 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:
- 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.
- 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>
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 "";
}
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"
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;
====================================================================