Basisprincipes van Perl - tekenreeksen, getallen, arrays, hashes. De belangrijkste websites met informatie over perl. Binaire gegevensopslag

Veelgestelde vragen over Perl voor beginners

Veelgestelde vragen verzameld tijdens de conferentie RU.CGI.PERL.CHAINIK Wat is CGI? Dit gemeenschappelijke interface gateways die een programma verbinden dat wordt uitgevoerd onder controle van een webserver en een client in de vorm van een HTTP-browser. Met andere woorden, dit is een tool waarmee je on-the-fly HTML-documenten kunt genereren, afhankelijk van de voorwaarden en wensen van de programmeur. Zoals elke client-servertool bestaat een CGI-programma uit twee delen: één dat op de client draait, in een browseromgeving, en het andere dat op de server draait, in een webserveromgeving. Het clientgedeelte is geschreven in HTML (mogelijk met behulp van verschillende aanvullende tools die de mogelijkheden ervan uitbreiden), servergedeelte kan worden geschreven in elke programmeertaal die uitvoerbare programma's kan maken op het platform waarop de webserver is geïnstalleerd. We zullen Perl voor deze doeleinden gebruiken omdat het handig is voor het verwerken van tekstreeksen - en HTML-document is maar tekst. haal het gewoon op ftp://cdl.bmstu.ru/soft/cgi. Installeer het echter niet in de map die het voorstelt voor installatie, maar in c:\apache . De webserver kan zelfs werken als deze standaard in de root is geïnstalleerd, maar bij het configureren ervan zullen er enkele discrepanties zijn met de hier voorgestelde optie. Als u ongewenste complicaties wilt voorkomen, wijzigt u het standaardpad. Start de webserver (er verschijnt een leeg zwart venster op het scherm - dit is een normaal resultaat van een succesvolle start; sluit dit venster niet met geweld - de webserver heeft een speciaal pictogram gemaakt waarmee u kunt voltooien). Open het vanuit een browser via de URL http://localhost en zorg ervoor dat de demo-webpagina, die zich in de htdocs-directory bevindt, succesvol wordt gestart. Als de webserver niet opstart, lees dan de foutmelding die wordt weergegeven. Meestal kan de webserver niet starten omdat de naam niet is opgegeven. Open het hoofdconfiguratiebestand van de webserver (httpd.conf) om te bewerken en verwijder de opmerking uit de overgedragen servernaam, waarbij u de server een willekeurige naam geeft, bijvoorbeeld localhost. Nu is het zinvol om te proberen uw eerste CGI-programma uit te voeren. Nadat het pad naar de tolk is opgegeven, moet u een http-header van de server instellen die het type gegevens aangeeft dat moet worden verzonden: Houd er rekening mee dat het http-headersveld eindigt met een dubbele regelinvoer. De headers zelf, als er meerdere zijn, worden van elkaar gescheiden door een enkele regelinvoer. De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: afdrukken "
VLINK=\"#551A8B\">\n"; Houd er rekening mee dat bij gebruik binnen een afdrukopdracht dubbele aanhalingstekens moeten worden doorgestreept - anders zal de tolk de aanhalingstekens als het einde van de opdracht beschouwen, en wat erna komt als een niet-beëindigde regel, en zal hij reageren met een runtime-fout.
Nu moet je een uitvoerregel schrijven en het HTML-document sluiten.
druk "Hallo" af; afdrukken "";
Ons hele eerste programma ziet er dus als volgt uit:
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: #!perl
print "Inhoudstype: tekst/html\n\n";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:

";
\N"; druk "Hallo" af; Controleer of het correct werkt door het programma lokaal uit te voeren. Om dit te doen, belt u opdrachtregel u moet het programma uitvoeren als een client-servertoepassing. Om dit te doen, moet u de programma-uitvoeringsrechten geven (voor besturingssystemen waar dit relevant is) en deze in een directory plaatsen waarin de webserver de programma's herkent als CGI-applicaties. Standaard is dit de cgi-bin directory, waar ons programma geplaatst moet worden. Om het programma uit te voeren, moet u de URL in het locatievenster typen: http://localhost/cgi-bin/bestandsnaam Hoe gegevens overbrengen tussen de client en de server? We hebben al gekeken hoe gegevens van de server naar de client kunnen worden overgedragen. De volgende stap is het overbrengen van gegevens van de client naar de server en het creëren van een client, rekening houdend met de informatie die naar de server wordt overgedragen. Er zijn verschillende METHODEN waarmee u informatie naar de server kunt overbrengen; De meest voorkomende zijn de GET-methode, die de gegevens in de URL doorgeeft, en de POST-methode, die de gegevens in de hoofdtekst van het verzoek doorgeeft. Het nadeel van de eerste is de beperkte hoeveelheid verzonden informatie (tot 127 bytes), het nadeel van de tweede is de moeilijkheid bij het vormen van een verzoek. Om een ​​verzoek te genereren met behulp van de GET-methode is het in feite voldoende om een ​​vraagteken achter de aanroep-URL te schrijven en de paren “naam=waarde” op te sommen via het ampersand: http://localhost/cgi-bin/test2. cgi?v1=vasya&v2 =petya enzovoort. Nu moet u deze gegevens op de server krijgen, waarvoor u alleen de inhoud hoeft op te halen omgevingsvariabele Als u nu het script aanroept met behulp van de bovenstaande URL, zal de module zoeken naar de streamvariabele “v1” in de ontvangen gegevens, en nadat hij deze heeft gevonden, zal hij de waarde ervan toewijzen aan de scalaire waarde $v1, die nu gelijk zal zijn aan “vasja”. Om de juistheid van onze constructies te bevestigen, laten we een programma draaien dat deze gegevensoverdracht illustreert: afdrukken "";
gebruik CGI qw(param);
$v1=param("v1");
$v2=param("v2");
Ons hele eerste programma ziet er dus als volgt uit:
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
print "Hallo, $v1 , $v2 !!!";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:

";

De POST-methode verzendt gegevens in de hoofdtekst van het verzoek en deze moeten worden ontvangen via de invoerstroom van het programma (laat me u eraan herinneren dat wanneer het programma door de webserver wordt gestart, het naar het HTTP-protocol wordt verzonden). Formulieren worden gebruikt om gegevens via deze methode in HTML te verzenden. Als we bijvoorbeeld het onderstaande formulier op de client uitvoeren, krijgen we precies hetzelfde resultaat als in het vorige voorbeeld: <HTML>

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






De CGI-module die invoergegevens verwerkt, werkt zowel bij gebruik van de GET-methode als bij gebruik van de POST-methode precies hetzelfde. Veelgestelde vragen (deel twee) Er wordt materiaal gebruikt uit de "Perl FAQ gemaakt door SLY Golovanov, 2:5020/794.13". Waar kan ik Perl-documentatie verkrijgen?<имя_модуля>Ten eerste wordt, wanneer Perl is geïnstalleerd, de opdracht perldoc aan uw systeem toegevoegd. Voer het uit met de perldoc-switch (dwz perldoc perldoc) en het zal u vertellen hoe u het moet gebruiken. Voor modules doe je perldoc<имя_функции>Ten tweede zijn er enkele boeken over Perl in het Russisch: 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/ En in het Engels: 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/ %%%%%%% %%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% % En hier kunt u kant-en-klare scripts voor verschillende doeleinden verkrijgen: www.script.ru www.codemanual.com %%%%%%%% %%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% Wat te doen als uw script voortdurend afsluitcode nummer 500 produceert (intern serverfout)? 1. Probeer het programma lokaal uit te voeren door op de opdrachtregel te typen: perl-bestandsnaam (waar bestandsnaam is, weet je wat). Houd er rekening mee dat als u in een Unix-systeem werkt, waar naast de vijfde parel die u hebt geïnstalleerd, er waarschijnlijk ook een ingebouwde vierde parel is, en het is geen feit dat deze zich later op de paden bevindt, het is logisch typen
Zorg ervoor dat een dergelijke regel aanwezig is in uw programma voordat u een teken naar de HTTP-stream uitvoert. Simpel gezegd moet dit afdrukcommando vóór elk ander afdrukcommando worden uitgevoerd. 3. Als dit geen resultaat oplevert, controleer dan of de Perl die u aanroept correct is. Op veel UNIX-systemen bevindt de vierde Perl zich langs het pad:/usr/lokaal/perl en de vijfde onderweg:/usr/local/bin/perl Zorg er voor het geval dat de vijfde Perl op het systeem is geïnstalleerd. 4. Als dit niet helpt, probeer dan te onthouden of het bestand met uw bewerkingsscript is verwerkt in teksteditors van Windows. Dit is uiteraard alleen relevant als u het script op een Unix-systeem uitvoert. Feit is dat Windows en Unix verschillende regeleindtekens hebben. Enige ingebouwde Windows-editor werkt op standaard Windows-regeluiteinden, maar Unix kan zo'n bestand niet uitvoeren. Om dit effect tegen te gaan, wordt aanbevolen om bestanden alleen op Unix-systemen te maken en te bewerken, of ze alleen op Windows te maken en te bewerken met de ingebouwde editor van de FAR-manager, waarmee u het type bestand kunt selecteren dat u wilt maken. door op shift-F2 te drukken. Standaard gebruikt deze editor de regeleinden die al in het bestand voorkomen (dat wil zeggen dat een bestand dat in UNIX is gemaakt, kan worden opgeslagen "zoals het is", zonder na te denken over het type ervan).
Als uw script al is gemaakt in
Windows standaard )
{
, en je wilt het op Unix draaien, gebruik dan bijvoorbeeld dit programma:
$v1 = "\x0d";
}
open A, "f1";
terwijl ($lijn=
$lijn =~ s/$v1//g;
$itog .= $regel;
Dit programma wordt geopend voor het lezen van een bestand met de naam f1, dat zich op de startplaats bevindt, en leest van daaruit alle regels om de beurt, waarbij het einde van elk ervan wordt vervangen. Na het lezen opent het programma hetzelfde bestand als een nieuw bestand om te schrijven en schrijft het resultaat ernaar. 5. Controleer als laatste kans of het script lees- en uitvoerrechten heeft van de gebruiker van wie de webserver draait. Nee, je moet het nog controleren.
Als dit u niet helpt, schrijf dan naar de conferentie. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%% Hoe kan ik alle webserveromgevingsvariabelen bekijken die momenteel actief zijn? voor (toetsen %ENV) ( print "$_ = $(ENV($_))\n" ) %%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Wat zijn cookies en waarvoor dienen ze?
Sleutels zijn een manier om een ​​bestand op de schijf van de client te openen. Omdat zo'n bestand een potentieel virus is, moet deze procedure op browserniveau goed worden beveiligd. De sleutel kan worden geïnstalleerd voor de duur van de actieve browser of voor een bepaalde periode. Voor het eerste type sleutels hoeft u niet het tijdstip op te geven waarop de sleutel wordt verwijderd; u moet dit tijdstip opgeven, en in een formaat dat toegankelijk is voor de browser. Als de browser de datums in de kalender niet kan instellen waarop de sleutel moet worden verwijderd, zal hij deze de eerste keer dat u het programma afsluit, wissen. Om het proces van het verzamelen van een datum te automatiseren, wordt een procedure gebruikt die de datum een ​​maand vooruit zet vanaf het huidige moment:
sub get_cookie_date(
mijn(@day, @mon, $i, $count, $sec,$min,$hours,$mday,$mon,$year, $wday, $yday,
$isdst, $resultaat);
($sec,$min,$hours,$mday,$mon,$year, $wday, $yday, $isdst)=gmtime(time+2592000);
@day=("Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag",
"Zaterdag");
@mon=("jan", "februari", "mrt", "april", "mei", "juni", "juli", "aug", "sep", "oktober",
"november", "december");< 10){$year = "0$year";}
}
if($jaar >= 100)(
$jaar = $jaar - 100;
als($jaar
}
$result=$day[$wday].", ".$mday."-".$mon[$mon].."-".$year." ".$hours.".$min.".$sec." GMT";
retourneer $resultaat; Vergeet niet een scalair pad naar uw programma in te voeren vanaf de hoofdmap van het overeenkomstige servergebied. Het is niet nodig om de programmanaam op te geven; deze wordt afzonderlijk verzonden. Bijvoorbeeld:
$pad = "/cgi-bin";
Nu kun je de sleutel altijd installeren door het volgende stukje code in je programma uit te voeren:

Om de sleutel te lezen, is er ook een speciale procedure voorzien: sub get_cookie(
mijn (%cook, @temp, $i, $count, $key, $value);
(@temp)=split(/;/, $ENV("HTTP_COOKIE"));
$count=@temp;
voor ($i=0; $i<$count; $i++){
$temp[$i]=~s/ //;
($sleutel, $waarde)=split(/=/, $temp[$i]);
$koken($sleutel)=$waarde;
}
retourneer %koken;
}
Hierna kunt u de sleutelwaarde bijvoorbeeld als volgt verkrijgen: if ($ENV(HTTP_COOKIE))($cookies=1; %cookies=get_cookie();)
anders ($cookies=0;)
als ($cookies==1)
{
$inloggen=$cookies("inloggen");
$pass=$cookies("wachtwoord");
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%% Hoe kopieer ik een bestand van het netwerk?
De eenvoudigste manier is om de libwww-module op uw systeem te installeren, waarmee u dit kunt doen. Hier is een voorbeeld van het gebruik ervan:
#!/usr/local/bin/perl
gebruik LWP::UserAgent;
gebruik CGI qw(header);
mijn $URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";
mijn $res = LWP::UserAgent->new->request(new HTTP::Request GET => $URL);
binmode(STDOUT);
print $res->inhoud; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% %%%%%%%%%%% Hoe kopieer ik een bestand naar de server?
gebruik CGI qw(param);
Om dit te doen, moet je de Multipart-codering van de post-methode gebruiken; hiermee kun je zelfs binaire bestanden naar de server overbrengen, en hun grootte is niet beperkt. Helaas ondersteunen niet alle browsers deze codering. Netscape heeft het sinds versie 2, MSIE sinds versie 3.02. Hier is een voorbeeld van het gebruik van deze methode:
#!/usr/local/bin/perl

$mode=param("modus");
$bestand=param("bestand");
# map waar het ontvangen bestand wordt geschreven.
{
Ons hele eerste programma ziet er dus als volgt uit:
$fup = "/huge/httpd/htdocs/ufo/up";
if ($mode eq "uploaden")
@naam= split(/\\/, $bestand);
@naam= omgekeerd(@naam);
($bestand1) = @naam;
$file_new="$fup/"."$bestand1";
open A, "+>$file_new";
binmodus A;
{
binmode $bestand;
}
open A, "f1";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
terwijl ($bytesread = lezen($bestand, $buf, 1024))
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:

";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:

";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:";
}
print A $buf;
{
Ons hele eerste programma ziet er dus als volgt uit:
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:

print "Het bestand is succesvol overgebracht naar de server.
elsif ($mode eq "")

Waarschuwing. Het bestandsoverdrachtprogramma werkt niet vanuit de browser -
We hebben Internet Explorer-versies lager dan 3.2"; print "
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:
action=\"/cgi-bin/upload.cgi\" enctype=\"multipart/form-data\"
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten: ";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:
";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:

";
De derde regel van ons programma bevat de benodigde apparatuur voor het maken van HTML-documenten:";
}
naam=\"uploaden\">"; Bestand uploaden:
Veelgestelde vragen (deel drie) Een brief versturen (op een UNIX-systeem).
Om met e-mail op UNIX-systemen te werken, wordt traditioneel het programma Sendmail gebruikt. U kunt er rechtstreeks toegang toe krijgen, of u kunt de mailopdracht gebruiken. In ieder geval moet u eerst de adressen voorbereiden door het "@"-symbool daarin te vervangen door "\@" - anders kan het programma niet worden uitgevoerd.
waarbij $mails een adres of een reeks adressen is, gescheiden door spaties. Brieven worden traditioneel verzonden in koi-8-codering, waarin onze tekst moet worden vertaald. Dit kan worden gedaan door de hoofdtekst van de letter, bijvoorbeeld, in de scalaire $as4 te schrijven en vervolgens de volgende bewerking daarop uit te voeren (om te converteren van 1251-codering naar koi-8-codering):
$as4 =~
tr/ABVGDEZHZIYKLMNOPRSTUFHTSCHSHSHSHYYYYYAabvgdezhzijklmnoprstufhtsshshshjyeyeyoyey/bvchzdetsy

klmnoprtufhzhigyuyeyashshaasBVCHZDETSYKLMNOPRTUFHZHIGYUYEYASCHASi?/;
Open MAIL, "|mail -s \"Onderwerp\" $mails";
# De scalaire $mails vermeldt alle adressen gescheiden door spaties
print MAIL "$as4"; # dit is de hoofdtekst van de brief sluit MAIL; Met het programma Sendmail kunt u als volgt een brief versturen:
open(MAIL, "|/usr/lib/sendmail -f $from_addr $mails");
print MAIL "Onderwerp: onderwerp_tekst\n";
print MAIL "inhoudstype: tekst/html; charset=koi8-r\n\n";<$to_addr>print MAIL "Aan: $user
\n"; # Op welk adres moet worden gereageerd.
print MAIL "$as4";

sluit MAIL; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% %%%%%%%%%%% Hoe kopieer ik een bestand naar de server?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% %%%%%%%%%%% Hoe lees ik een geaccepteerde brief?
De eenvoudigste manier is om de e-mailbibliotheek te gebruiken.
gebruik Mail::POP3Client;<= $pop->$pop = new Mail::POP3Client("login", "wachtwoord", "mail.server.ru");
voor ($i = 1; $i
Graaf; $i++) (
$bbb = $pop->Body($i);
$aaa = $pop->Hoofd($i);
foreach ($pop->Head($i)) (/^(From|Subject): / en print $_, "\n";)
# $pop->Verwijderen($i); #zo verwijderen ze een gelezen brief
}
druk "$aaa\n" af;
druk "$bbb\n" af;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% %%%%%%%%%% LWP-veelgestelde vragen door Paul Kulchenko ( [e-mailadres beveiligd]

), bijgewerkt op 04/03/2000 Dit is een beschrijving van een LWP-module (ook wel LibWWW genoemd) die veel zeer nuttige functies bevat. ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? 1.2. Hoe kan ik een jpeg/gif/bmp-bestand verkrijgen en retourneren? 1.3. Hoe toegang krijgen tot een met een wachtwoord beveiligd bestand? 1.4. Hoe REFERER en andere HTTP-headerparameters instellen? 1.5. Hoe krijg ik een gespecificeerd deel van het bestand (eerste MAXSIZE bytes)? 1.6. Hoe cookies verkrijgen en instellen? 1.7. Hoe proxyservers opgeven? 1.8. Hoe controleer ik op omleidingen? 1.9. Hoe parameters voor de POST-methode maken? ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? Een bestand ontvangen via http of ftp gebruik LWP::UserAgent;";
mijn $URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";
Mijn $URL = "
================================================= === =================== 1.2. Hoe kan ik een jpeg/gif/bmp-bestand verkrijgen en retourneren? Hoe je een foto krijgt. [e-mailadres beveiligd]
gebruik CGI qw(header -no_debug);
$URL = "
http://a100.g.akamaitech.net/7/100/70/0001/www.fool.com/art/new/butts/go99 .
gif";
mijn $res = LWP::UserAgent->new->request(new HTTP::Request GET => $URL);
binmode(STDOUT);
print $res->is_success ? (header("afbeelding/gif"), $res->inhoud)
: (header("text/html"), $res->status_line);
================================================= === =================== 1.3. Hoe toegang krijgen tot een met een wachtwoord beveiligd bestand? Hoe u een wachtwoord invoert. BEGIN (
pakketRequestAgent;
#!/usr/local/bin/perl
@ISA = qw(LWP::UserAgent);

Sub nieuw ( LWP::UserAgent::new(@_); )
sub get_basic_credentials (retourneer "gebruiker", "wachtwoord" )
}
gebruik CGI qw(header -no_debug);

Mijn $res = RequestAgent->new->request(new HTTP::Request GET => $URL);
print header, $res->is_success ? $res->content: $res->status_line;
================================================= === =================== 1.4. Hoe REFERER en andere HTTP-headerparameters instellen? Hoe sessie-omgevingsvariabelen in te stellen. #!/usr/local/bin/perl
gebruik HTTP::Headers;
gebruik CGI qw(header -no_debug);

), bijgewerkt op 04/03/2000 Dit is een beschrijving van een LWP-module (ook wel LibWWW genoemd) die veel zeer nuttige functies bevat. ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? 1.2. Hoe kan ik een jpeg/gif/bmp-bestand verkrijgen en retourneren? 1.3. Hoe toegang krijgen tot een met een wachtwoord beveiligd bestand? 1.4. Hoe REFERER en andere HTTP-headerparameters instellen? 1.5. Hoe krijg ik een gespecificeerd deel van het bestand (eerste MAXSIZE bytes)? 1.6. Hoe cookies verkrijgen en instellen? 1.7. Hoe proxyservers opgeven? 1.8. Hoe controleer ik op omleidingen? 1.9. Hoe parameters voor de POST-methode maken? ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? Een bestand ontvangen via http of ftp http://localhost/cgi-bin/hello.cgi ";
mijn $res = LWP::UserAgent->new->request(
nieuwe HTTP::Verzoek(
GET => $URL,
nieuwe HTTP::Headers-verwijzer => "
http://www.yahoo.com "),
);
print header, $res->is_success ? $res->content: $res->status_line;
================================================= === =================== 1.5. Hoe krijg ik een gespecificeerd deel van het bestand (eerste MAXSIZE bytes)? Hoe u een deel van een bestand kunt verkrijgen. #!/usr/local/bin/perl
gebruik CGI qw(header -no_debug);

), bijgewerkt op 04/03/2000 Dit is een beschrijving van een LWP-module (ook wel LibWWW genoemd) die veel zeer nuttige functies bevat. ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? 1.2. Hoe kan ik een jpeg/gif/bmp-bestand verkrijgen en retourneren? 1.3. Hoe toegang krijgen tot een met een wachtwoord beveiligd bestand? 1.4. Hoe REFERER en andere HTTP-headerparameters instellen? 1.5. Hoe krijg ik een gespecificeerd deel van het bestand (eerste MAXSIZE bytes)? 1.6. Hoe cookies verkrijgen en instellen? 1.7. Hoe proxyservers opgeven? 1.8. Hoe controleer ik op omleidingen? 1.9. Hoe parameters voor de POST-methode maken? ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? Een bestand ontvangen via http of ftp http://www.yahoo.com/ ";
mijn $MAXSIZE = 1024;

Koptekst afdrukken;
mijn $res = LWP::UserAgent->new->request(
new HTTP::Request(GET => $URL), \&callback, $MAXSIZE);

Sub-callback ( my($data, $response, $protocol) = @_; print $data; die )
================================================= === =================== 1.6. Hoe cookies verkrijgen en instellen? Hoe de sleutel te installeren en te lezen. #!/usr/local/bin/perl
gebruik CGI qw(header -no_debug);
gebruik HTTP::Cookies;

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

Mijn $ua = nieuwe LWP::UserAgent;
mijn $res = $ua->request(new HTTP::Request GET => $URL);
mijn $cookie_jar = nieuwe HTTP::Cookies;
$cookie_jar->extract_cookies($res);

Koptekst afdrukken;
if ($res->is_success) (
mijn $req = nieuwe HTTP::Request GET => $URL;
$cookie_jar->add_cookie_header($req);
$res = $ua->verzoek($req);
print $res->is_success ? $res->as_string: $res->status_line;
) anders (
print $res->status_line;
}
================================================= === =================== 1.7. Hoe proxyservers opgeven? Hoe te werken via een proxy. #!/usr/local/bin/perl
gebruik CGI qw(header -no_debug);

), bijgewerkt op 04/03/2000 Dit is een beschrijving van een LWP-module (ook wel LibWWW genoemd) die veel zeer nuttige functies bevat. ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? 1.2. Hoe kan ik een jpeg/gif/bmp-bestand verkrijgen en retourneren? 1.3. Hoe toegang krijgen tot een met een wachtwoord beveiligd bestand? 1.4. Hoe REFERER en andere HTTP-headerparameters instellen? 1.5. Hoe krijg ik een gespecificeerd deel van het bestand (eerste MAXSIZE bytes)? 1.6. Hoe cookies verkrijgen en instellen? 1.7. Hoe proxyservers opgeven? 1.8. Hoe controleer ik op omleidingen? 1.9. Hoe parameters voor de POST-methode maken? ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? Een bestand ontvangen via http of ftp http://www.yahoo.com/ ";
mijn $ua = nieuwe LWP::UserAgent;

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

Mijn $res = $ua->request(new HTTP::Request GET => $URL);
print header, $res->is_success ? $res->content: $res->status_line;
================================================= === =================== 1.8. Hoe controleer ik op omleidingen? Hoe u een omleiding kunt maken #!/usr/local/bin/perl
gebruik CGI qw(header -no_debug);

), bijgewerkt op 04/03/2000 Dit is een beschrijving van een LWP-module (ook wel LibWWW genoemd) die veel zeer nuttige functies bevat. ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? 1.2. Hoe kan ik een jpeg/gif/bmp-bestand verkrijgen en retourneren? 1.3. Hoe toegang krijgen tot een met een wachtwoord beveiligd bestand? 1.4. Hoe REFERER en andere HTTP-headerparameters instellen? 1.5. Hoe krijg ik een gespecificeerd deel van het bestand (eerste MAXSIZE bytes)? 1.6. Hoe cookies verkrijgen en instellen? 1.7. Hoe proxyservers opgeven? 1.8. Hoe controleer ik op omleidingen? 1.9. Hoe parameters voor de POST-methode maken? ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? Een bestand ontvangen via http of ftp http://www.yahoo.com/ ";
mijn $URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";

Koptekst afdrukken;
print $res->request->url als $res->vorige->is_redirect;
================================================= === =================== 1.9. Hoe parameters voor de POST-methode maken? Hoe u een verzoek kunt verzenden via de POST-methode zonder een formulier te gebruiken. gebruik URI::URL;
gebruik HTTP::Verzoek;
#!/usr/local/bin/perl
gebruik CGI qw(header -no_debug);

), bijgewerkt op 04/03/2000 Dit is een beschrijving van een LWP-module (ook wel LibWWW genoemd) die veel zeer nuttige functies bevat. ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? 1.2. Hoe kan ik een jpeg/gif/bmp-bestand verkrijgen en retourneren? 1.3. Hoe toegang krijgen tot een met een wachtwoord beveiligd bestand? 1.4. Hoe REFERER en andere HTTP-headerparameters instellen? 1.5. Hoe krijg ik een gespecificeerd deel van het bestand (eerste MAXSIZE bytes)? 1.6. Hoe cookies verkrijgen en instellen? 1.7. Hoe proxyservers opgeven? 1.8. Hoe controleer ik op omleidingen? 1.9. Hoe parameters voor de POST-methode maken? ================================================= === =================== 1.1. Hoe krijg ik een tekstbestand (http, ftp)? Een bestand ontvangen via http of ftp http://yahoo.com/?login=mijnlogin&password=mijnwachtwoord ";
mijn $uri = nieuwe URI $URL;
mijn $methode = "POST";

Mijn $verzoek;
if (uc($methode) eq "POST") (
mijn $query = $uri->query;
(mijn $url = $uri->as_string) =~ s/\?$query$//;
$request = nieuwe HTTP::Request ($method, $url);
$request->header("Content-Type" => "application/x-www-form-urlencoded");
$request->inhoud($query);
) anders (
$request = nieuwe HTTP::Request ($method, $uri->as_string);
};

# voeg Host-veld toe zoals vereist in HTTP/1.1
$request->header(Host => $uri->host_port) if $uri->scheme ne "file";

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

Koptekst afdrukken, $res->is_success ? $res->content: $res->status_line;
====================================================================



Toevallig ken ik minstens twee mensen die Perl zouden willen leren. Ik besloot dit bericht speciaal voor hen te schrijven.

  • Deel 1: Typen variabelen (je leest dit deel)

Daarin vind je voorbeelden van eenvoudige programma's uit de serie “print nummers van 1 t/m 5” en dergelijke. Ik heb altijd graag van voorbeelden geleerd - het is interessanter en sneller dan uit boeken of seminars. Je kunt ook de berichten op deze blog bekijken, de kans is groot dat je daar meer voorbeelden vindt.

Ik neem aan dat je op school/instituut Pascal/Delphi, C of in ieder geval Basic hebt gestudeerd, en het is niet nodig om uit te leggen wat een functie en loops zijn. Als dit niet het geval is, is het oké, alleen om erachter te komen, zul je moeten uitgeven extra tijd voor het lezen van Wikipedia. Als je niet weet hoe je een bash-script moet uitvoeren, of waarom je in de eerste regel van het script zoiets zou moeten schrijven als #!/bin/sh, je zult een beetje moeten googlen om erachter te komen.

Speciaal voor degenen die geïnteresseerd zijn in de vragen “is het waar dat Perl erg ingewikkeld is”, “welke boeken over Perl kun je aanbevelen” en zelfs “uh... is het nog steeds in Perl geschreven?”, schreef ik een Mini- Veelgestelde vragen over Perl, die u kunt lezen op HabraHabr. En voor degenen die versterkte niet veel letters Hier geef ik er een korte samenvatting van:

  • Perl- moderne taal programmeren waarin ze schrijven en nog heel lang zullen blijven schrijven.
  • Perl heeft, net als elke andere programmeertaal, zijn voordelen, nadelen en toepassingen. Bestaat echt groot klasse van problemen die Perl oplost met 5+.
  • De Perl-syntaxis is niet complexer dan de C++- of Java-syntaxis. Je kunt dit verifiëren door dit bericht tot het einde te lezen.
  • Er zijn goede, maar toch goedkope Perl-tutorials. U kunt ook gemakkelijk online een gemeenschap van Perl-programmeurs vinden die uw moedertaal spreken.
  • Perl werkt goed onder beide besturingssystemen UNIX-familie, en onder Evil Windows.

Toevoeging: Ik raad je ook aan om de artikelen Perl vs Python vs Ruby vs PHP en Priests of Programming te lezen. De eerste gaat over de prestaties van verschillende scripttalen, de tweede over het verschil tussen PHP en andere talen. Voor Python-fans raad ik je aan het artikel Python-scriptprestatietest te lezen. Ik hoop dat dit materiaal je zal helpen het antwoord te vinden op de vraag “wat is er goed aan Perl.”

Hallo %gebruikersnaam%!

Laten we dus alvast ons eerste Perl-script schrijven!

#!/usr/bin/perl

$naam = shift() ;
print("Hallo, $naam! \N") ;

Laten we het script uitvoeren:

$ chmod u+x 1 .pl
$ ./ 1 .pl afiskon
Hallo afiskon!

Alles is hier heel eenvoudig:

  • De namen van scalaire variabelen (dat wil zeggen, niet matrices of hashes, wat ze zijn - zie hieronder) beginnen met een dollarteken.
  • De shift-functie retourneert het volgende scriptargument. Met andere woorden: de eerste aanroep van shift() retourneert het eerste argument, de tweede aanroep retourneert het tweede argument, enzovoort.
  • De functie print() drukt de als argument doorgegeven tekenreeks af.
  • U kunt variabele waarden in de regel vervangen (zie regel 4). Voor meer informatie over snaren, zie hieronder.

Als het nog niet helemaal duidelijk is, is dat geen probleem. Misschien zal een beetje theorie wat meer duidelijkheid brengen.

Variabele typen

Er zijn drie hoofdtypen variabelen in Perl: scalairen(cijfers en tekenreeksen), arrays- vergelijkbaar met die gebruikt in Pascal of C (soms worden arrays ook vectoren genoemd), en hasj (associatieve arrays).

Scalairen die we al in het vorige voorbeeld gebruikten. Hier volgen nog enkele voorbeelden van het specificeren van scalairen.

#!/usr/bin/perl

$a = 123 ;
$b = - 7,496;
$c = 0xABC; # is gelijk aan 2748, ja, het is een opmerking :)
$d = ($a + $b) / $c;
$d *= $a; # hetzelfde als $d = $d * $a;

$str1 = "hallo";
$str2 = "$str1, wereld" ; # $str2 bevat "hallo, wereld"
$str3 = $een. " \N". $str2;
$str4 = "$str1" ; # $str4 bevat "$str1", niet "hallo"

Hier stellen we positieve en negatieve getallen in, hele getallen en breuken, stellen we een getal in in hexadecimale codering, optellen, vermenigvuldigen en delen - alles zoals in C of Java. Naast de bovenstaande bewerkingen ondersteunt Perl ook de machtsverheffingsbewerking:

$a = 2 ** 8 ;

Met strings is alles ongeveer hetzelfde als in sommige PHP. De punt betekent de aaneenschakelingsbewerking (dat wil zeggen, het aan elkaar plakken van strings); de string bevat variabelenamen, waarden worden op hun plaats vervangen; symbolen kunnen worden ingevoegd met behulp van een backslash nieuwe lijn(\n), tabs (\t), aanhalingstekens (\"), de backslash zelf (\\), het dollarteken zonder enige vervanging van variabelen (\$) en nog veel meer. Als de string in enkele aanhalingstekens, worden de symbolen daarin geïnterpreteerd “zoals ze zijn”, zonder vervanging van variabelen, enz.

Net als PHP interpreteert Perl scalaire waarden als getallen of tekenreeksen, afhankelijk van de bewerking. Het is eenvoudig:

$int1 = "11" + 22;
# ^ de string "11" wordt omgezet in een getal,
# waarna optelling wordt uitgevoerd, resultaat: 33.
$str1 = "11" .
22;
# ^ het getal 22 wordt omgezet in een string,

# waarna aaneenschakeling wordt uitgevoerd, is het resultaat "1122".

De regels voor het converteren van een string naar een getal en omgekeerd zijn dezelfde als in PHP:
$str1 = 0 .
"abc";
# ^ het resultaat is "abc", het getal nul wordt geconverteerd naar de lege string
$int1 = "aaa" + 1;
# ^ resultaat is 1, er staan ​​geen getallen in de string "aaa"

$int2 = "12aaa" + 1; # ^ resultaat is 13, alleen de eerste cijfers van de string worden in aanmerking genomen Trouwens, voor de aankondiging

lange rijen
Er zijn speciale operatoren - q en qq:
# vergelijkbaar met enkele aanhalingstekens
} ;
$tekst = q (
Heb je $15?
# vergelijkbaar met dubbele aanhalingstekens
$bericht = qq (
} ;

Hallo, $gebruikersnaam! Hoe is het met je?

#!/usr/bin/perl

Werken met arrays
gebeurt als volgt: $scalair = "bebebebe" ;
($a, $b) = (1, 2);
# hetzelfde als $a = 1; $ b = 2; \N";
@arr = ("aaa" , 123 , $scalar , $a + $b ) ;
print $arr[1] . " \N";

druk op @arr, $a; printpop (@arr) . " Hier maken we een array @arr bestaande uit 4 elementen (regel 5). Vervolgens voeren we het tweede element uit (regel 6). De nummering van de elementen begint vanaf nul, dus index 1 wordt gebruikt om het tweede element weer te geven. Vervolgens plaatsen we de waarde van de variabele $a aan het einde van de array (.

push-functie

, regel 7), en onmiddellijk uitpakken en weergeven (functie pop, regel 8). Houd er rekening mee dat arraynamen beginnen met "dog" en niet met dollar (het is niet moeilijk te onthouden - de overeenkomstige symbolen zijn vergelijkbaar met de eerste letters van Engelse typenamen: $ - scalair, @ - array). Bij toegang tot het tweede array-element (regel 6) werd het dollarteken gebruikt omdat het array-element scalair is. In eerste instantie zorgt dit voor veel verwarring, maar over het algemeen is alles logisch. en druk zonder haakjes. In Perl kunnen bij het aanroepen van een functie, waar deze geen dubbelzinnigheid veroorzaakt, de haakjes worden weggelaten.

Om een ​​array te declareren waarvan de elementen strings zonder spaties zijn, is er een speciale operator - qw:

@arr = qw/aaa bbb ccc/ ;
# vergelijkbaar met ("aaa", "bbb", "ccc"), alleen korter

Hasj zijn vergelijkbaar met arrays, maar de elementen in de hash zijn niet geordend. In dit geval kunnen strings worden gebruikt als sleutel waarmee toegang wordt verkregen tot een element.

#!/usr/bin/perl

%hash = ( # bij het declareren van hashes en arrays kan dat
"x" => 12, # gebruik regeleinden
y => 53 , # als er geen speciale tekens in de sleutel voorkomen, zijn aanhalingstekens niet nodig
"z" => - 10,5, # Je kunt aan het einde een komma achterlaten
) ;

$hash("x"++); # x-coördinaat is nu 13
$hash (y) --; # y-coördinaat is nu 52

# weergavecoördinaten
afdrukken "x = $hash(x), y = $hash(y), z = $hash(z)\n ";

Hash-namen beginnen met een procentteken en worden gebruikt om naar een element te verwijzen. beugel(niet vierkant, zoals het geval is bij arrays). Als de sleutelnaam vooraf bekend is, kunt u deze zonder aanhalingstekens opgeven (regel 10).

Overigens zijn de variabelen $test, @test en %test volledig onafhankelijke variabelen van verschillende typen.

Op dit punt wilde ik naar toe voorwaardelijke uitspraken en for/while loops, maar ik realiseerde me dat er al te veel tekst is voor één bericht. Ondertussen blijven er achter de schermen veel vragen bestaan:

  • Voorwaardelijke verklaringen;
  • For- en while-lussen;
  • Verklaring van functies;
  • Werken met streams en bestanden;
  • Strikte syntaxis;
  • Met behulp van kant-en-klare modules en lessen.

Ik zal hierover schrijven in een van de volgende berichten. Ik zou graag op zijn minst een paar reacties op dit bericht willen ontvangen: interessant/oninteressant, begrijpelijk/onbegrijpelijk, enzovoort. Trouwens, als je vragen hebt over Perl (niet noodzakelijkerwijs gerelateerd aan dit bericht), stel ze dan gerust in de reacties!

Ik hoop dat deze reeks berichten over programmeren in Perl je zal helpen bij het schrijven van je eerste eenvoudige scripts. In de loop van de tijd zullen scripts complexer worden en nieuwe technologieën gebruiken (OOP, reguliere expressies) en na een tijdje zult u merken dat u genoeg over Perl weet om uw ervaringen met anderen te delen.

Dit artikel is geschreven voor mensen die vanwege overmacht voelde dringend de drang om Pearl te bestuderen. Voor mij was deze omstandigheid dat mijn computer een WEB-server werd, en ik dus een WEB-master. Het is gebruikelijk om te leren van de fouten en ervaringen van anderen, daarom breng ik mijn ervaring met het bestuderen van Pearl onder uw aandacht.

Het is onmiddellijk nodig om uit te leggen voor wie dit allemaal is geschreven. Als uw server op een UNIX-platform draait, dan zou ik degene moeten zijn die uw artikel leest. Ik heb Windows NT-werkstation 4.0 (RUS) plus Service Pack 3 geïnstalleerd. Toen het tijd werd om een ​​WEB-server van mijn computer te maken, haastte ik me naar de ingebouwde WEB-host Services, maar besefte al snel dat ik het niet leuk vond. (Waarom?). En toen adviseerde een vriendelijke persoon om Xitami WEB Server van iMatix Corporation (), dat nog steeds bestaat, te installeren.

Wat Pearl zelf betreft, het is iets ingewikkelder. Nadat ik verschillende Perl-servers had doorzocht (www.perl.org, www.perl.com), kwam ik erachter dat er zoveel versies van Perl zijn dat het behoorlijk moeilijk is om iets specifieks te kiezen. Tegelijkertijd zijn er geen begrijpelijke aanbevelingen met betrekking tot de keuze voor de ene of de andere versie. Nadat ik bijna alle versies voor Windows had geprobeerd, koos ik voor Active Perl().

Voor iemand die verwend is met allerlei soorten Windows en Delphi is het schrijven van programma's in Perl nogal ongebruikelijk, dus ik raad ten zeerste aan om Perl Builder meteen te installeren. Je kunt het verkrijgen op www.solutionsoft.com. Er was daar een demoversie van dertig dagen.

Welnu, ik denk dat het tijd is om meteen ter zake te komen. Over het algemeen werkt een Pearl-script, net als elk ander programma, als volgt:

  1. ontvangt gegevens
  2. verwerkt gegevens
  3. geeft resultaat

U kunt gegevens op twee manieren naar het script overbrengen: GET en POST. Het verschil tussen beide is dat bij gebruik van GET de gegevens voortdurend in de adresbalk van de browser bungelen, bijvoorbeeld:

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

In dit geval neemt het script B_price.pl de gegevens in de omgevingsvariabele QUERY-STRING over.

$data=$ENV("QUERY_STRING");

Bij gebruik van de methode POST-gegevens doorgegeven aan standaard invoer script. De lengte van het datablok wordt overgenomen in de CONTENT_LENGTH variabele:

Lezen(STDIN,$data,$ENV("CONTENT_LENGTH"));

Nu moeten deze gegevens worden vertaald in een verteerbare vorm, omdat ze gecodeerd zijn.

De standaardconventie is om spaties te vervangen door plustekens en vervolgens de resterende ongeldige tekens te coderen met behulp van ASCII-codes in hexadecimaal, voorafgegaan door een (%) teken. Voorbeeld:

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

Dit betekent:

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

Het is beter om de queryreeks voor de eerste keer zelf te decoderen. Op de vraag “hoe?” Er zijn veel antwoorden die geen zin hebben om te herschrijven. Ik zal u slechts een kort voorbeeld geven:

Vervang (+) tekens door spaties

$query = ~ s/\+/ /g;

Vervolgens vervangen we alle combinaties van het (%) teken, gevolgd door hexadecimale cijfers, door de overeenkomstige ASCII-teken

$query =~ s/%((2))/pack("C", hex($1))/eg;

Ik gebruik wat Perl Builder biedt:

#! E:\perl5\bin\perl # roep de routine voor het ophalen van gegevens aan $Category = $field("Category"); # haal gegevens op uit het Categorieveld $Description = $field("Description"); # haal gegevens op uit het beschrijvingsveld $Page = $field("Pagina"); # haal gegevens op uit het paginaveld

Aan het einde van het script plaatsen we een subroutine voor het “transparant” lezen van gegevens.

Sub GetFormInput ( (*fval) = @_ if @_ ; lokaal ($buf); if ($ENV("REQUEST_METHOD") eq "POST") ( read(STDIN,$buf,$ENV("CONTENT_LENGTH")) ; ) else ( $buf=$ENV("QUERY_STRING"); ) if ($buf eq "") (retourneert 0;) else ( @fval=split(/&/,$buf); foreach $i (0 . . $#fval)( ($naam,$val)=split (/=/,$fval[$i],2); $val=~tr/+/ /; $val=~ s/%(.. )/pack("c",hex($1))/ge; $naam=~tr/+/ / $naam=~ s/%(..)/pack("c",hex($1))/ ge; if (!defined($field($name))) ( $field($name)=$val; ) else ( $field($name) .= ",$val"; #if je meerdere selecties wilt om naar een array te gaan, verander naar: #$field($name) .= "\0$val" ) return 1;

De tweede fase van het script – gegevensverwerking – is geheel naar eigen goeddunken. Controleer de ontvangen gegevens op nauwkeurigheid, schrijf ze naar een bestand, doe wat je wilt.

Ten slotte moet u enkele resultaten aan de browser van de klant doorgeven, zodat de browser deze correct weergeeft. Dat wil zeggen dat u de resultaten in HTML moet weergeven. Dat gaat eenvoudig: (kan ook op verschillende manieren)

Afdrukken "Inhoudstype: tekst/html", "/n/n"; #vereiste regelafdruk "

In het veld Categorie heeft u het volgende ingevoerd: ", $Category, "

Dit geldt allemaal voor scripts die gegevens ontvangen van een formulier op een HTML-pagina. In dit geval is de pagina met het formulier afzonderlijk, het script is afzonderlijk. Je kunt het mooier en handiger maken: combineer de pagina en het script tot één geheel. Om dit te doen, is het script geschreven volgens het volgende schema:

  1. Wanneer het voor het eerst wordt gelanceerd, wordt het script getekend HTML-pagina met een formulier en een link in de ACTION-tag naar zichzelf. De eerste run wordt bepaald door het ontbreken van invoergegevens.
  2. Als er inputgegevens zijn, dan ontvangen wij deze, verwerken deze en produceren resultaten.

#! E:\perl5\bin\perl if (($ENV("QUERY_STRING") eq "") of ($ENV(CONTENT_LENGTH)=0)) ( # een pagina genereren met het formulier ) else (# gegevens ontvangen, verwerken en voer het resultaat uit)

Gastenboek

Het algemene algoritme voor het gastenboek is als volgt:

1. Als een bezoeker een aantekening in het boek wil maken, dan
1.1 Gegevens verkrijgen
1.2 Schrijf ze naar een bestand of database
1.3 Wij bedanken HTML en stellen voor om andere artikelen te lezen
2. Als de bezoeker de vermeldingen in het boek wil lezen, dan
2.1 Records uitlezen uit een bestand of uit een database
2.2 We geven ze prachtig weer in HTML

Voor het gemak van de waarneming heb ik de punten 1 en 2 geformatteerd met afzonderlijke scripts respectievelijk add_guestbook.pl en read_guestbook.pl. Gastenboekberichten worden opgeslagen in tekstbestand regel voor regel, d.w.z. voor elk record is er een regel. Dit wordt gedaan om dit bestand gemakkelijker leesbaar te maken. Voorbeeld van één invoer:

Za 5 december 13:31:20 1998&Natasha&student&Goed&Goed om te beginnen. Ik wens je succes op dit gebied, Alexander!&no@yet&194.226.60.34

Hier vindt u een beschrijving van de velden in het betreffende gastenboek.

  • Naam - voornaam, achternaam, patroniem, bijnaam - naar goeddunken van de bezoeker
  • Werk - beroep, beroep
  • RadioButton - drie knoppen: ik vond het leuk (goed), ik vond het niet leuk (slecht), het kan me niet schelen (anders)
  • Tekst - tekstvak met opmerkingen en notities
  • E-mail - retouradres

Met Perl kunt u schrijven krachtige programma's vanaf het allereerste begin, of je nu een beginnende programmeur of een expert bent. Perl biedt standaard programmeertools (vergelijkingsoperatoren,ren, lijstfuncties) en heeft snelkoppelingen voor het invoeren van tekenbereiken. Perl biedt ook bestandstests, zodat u snel kunt vinden wat u zoekt.

De nuttigste bestandstests in Perl

Programmeren met Perl is vrij eenvoudig, dit geldt ook voor de letters die u gebruikt om bestanden te controleren. Bijvoorbeeld, R controleert of het bestand dat kan R eed, een T op zoek naar een bestand T ext. Hier zijn de meeste nuttige testen bestanden in Perl:

Speciale tekens in Perl

Zoals elke programmeertaal gebruikt Perl speciale elftallen Voor speciale karakters, zoals omgekeerde of verticale tabbladen. Dus als u een oproep moet programmeren of piep of alleen een regelterugloop, controleer de volgende tabel voor het teken dat dit teken zal produceren:

Perl Waar-onwaar-vergelijkingsoperatoren

Wanneer u in Perl of een andere taal programmeert, gebruikt u voortdurend vergelijkingsoperatoren. De volgende tabel toont algemene vergelijkingen voor Perl in zowel wiskundige als stringvorm:

push (@r, @s)

splitsing(@r, $#r + 1, 0, @s)

Elk nummer

Match 1 of meerdere keren

*

Match 0 of meer keer >?

De meest gebruikte scripttaal is echter Perl.

Dit hoofdstuk gaat over de Perl-taal en het gebruik ervan. Als u eenmaal met Perl leert programmeren, kunt u het gebruiken om scripts te schrijven die een groot aantal internet- en webprogrammeerproblemen oplossen.

Er zal bijzondere nadruk worden gelegd op de functies die worden gebruikt bij het schrijven van CGI-scripts. Als u nog nooit in Perl heeft geprogrammeerd, gebruik dan dit hoofdstuk als startpunt om het te leren.

De concepten waarmee u in dit hoofdstuk kennismaakt, leren u hoe u professionele Perl-scripts schrijft.

Dit hoofdstuk behandelt niet alleen de basisbeginselen van het programmeren in Perl, maar ook verschillende andere aspecten. Tegen de tijd dat u klaar bent met het lezen van dit hoofdstuk, kunt u de volgende sleutelconcepten begrijpen: Perl is een geïnterpreteerde programmeertaal die specifiek gericht is op tekstverwerking.

Programmeurs roepen programma's vaak in een taal aan Perl-scripts. Met behulp van Perl creëren programmeurs CGI-formulieren.

Perl ondersteunt bewerkingen met bestanden en databases. Dit maakt het zeer geschikt voor het opslaan en ophalen van informatie volgens de behoeften van internetgebruikers.

Perl wordt geleverd met een debugprogramma dat u kunt gebruiken om uw Perl-code te testen

In deze sectie:

8 PERL-programmeertaal
Dit artikel laat u kennismaken met de Perl-taalcursus, geeft een vergelijkende beschrijving van Perl en C/C++ en vertelt u over de rijkdom van Perl.

8 PERL gebruiken
Principes van het gebruik van Perl, of wat er gedaan kan worden met Perl.

8 Inleiding tot PERL
Basisconcepten van de Perl-taal, eerste voorbeeld.

8 PERL installeren
Een lichte hint voor het installeren van Perl.

8 Met behulp van de PERL-foutopsporing
Basisprincipes van het werken met de Perl-debugger; debugger-opdrachten; voorbeelden van gebruik.

8 Gegevenstypen in PERL
Het hoofdstuk is gewijd aan datatypen en de overgang van het ene type naar het andere

8 Variabelen
Perl ondersteunt drie soorten variabelen: scalairen, arrays en associatieve arrays. Dat is waar we het over hebben. ;-)

8 PERL-verklaringen
Overzicht van de basisoperatoren van Perl.

8 PERL-taalconstructies
Beschrijving van Perl-syntaxisfuncties. Basisoperatoren.

8 Subroutines
Syntaxis en semantiek van routines in Perl.

8 Tekenreeksverwerking
Beschrijving van functies voor het verwerken van stringvariabelen.

8 Lijstverwerking
Diverse functies die de mogelijkheden voor het werken met lijsten uitbreiden.

8 Hallo, $gebruikersnaam!
Perl bevat verschillende ingebouwde functies die u helpen bij het werken met array-elementen.

8 CGI-scripts die PERL gebruiken
In dit hoofdstuk leert u Perl gebruiken om CGI-scripts te maken.