Scripturi Pearl. Scripturi Perl. Rolul contextului pentru variabilele de tipuri scalare și vectoriale

1. Folosind scripturi gata făcute

Dacă ați scris deja scripturi CGI, atunci înainte de a le copia pe server, ar trebui să faceți următoarele acțiuni:

  • Asigurați-vă că scripturile indică calea corectă către interpret:

Perl: /usr/bin/perl
Piton: /usr/local/bin/python

  • Dacă scriptul dumneavoastră necesită acces la baza de date Date MySQL, atunci trebuie să specificați parametrii de acces (vezi articolul)
  • În capitolul Administrare server web activați modulul CGI.

Acum vă puteți copia scripturile pe server.
Fișierele trebuie să fie încărcate într-un director domeniul dvs./cgi. Fișierele din acest director vor fi disponibile la http://domeniul_dvs./cgi-bin/nume_fișier. Pentru ca scripturile CGI să ruleze de la directorul rădăcină site-ul domeniul dvs./docs, trebuie să creați un fișier .htaccess în el cu următorul conținut:

AddHandler cgi-script .cgi .pl .py
Opțiuni+ExecCGI

Drepturile de acces trebuie setate pentru scripturi 755 sau -rwxr-xr-x.
Drepturile de acces pot fi modificate folosind Panoul de control.

2. Scrierea unui script CGI simplu

Luați în considerare să scrieți un simplu Script CGIîn Perl.
Dacă rulați sistemul de operare Windows, atunci pentru a lucra cu cod de script trebuie să utilizați un sistem specializat editor de text de exemplu Notepad++. Standard pentru program Windows Este mai bine să nu folosiți Notepad. Pentru a demonstra cum funcționează scriptul CGI, trebuie să creați două fișiere. Primul fișier este un document HTML cu un formular de introducere a textului:





Exemplu de lucru cu Perl



Introdu numele tau:



Al doilea fișier este un script CGI

#!/usr/bin/perl
utilizați CGI;
printează „Tipul conținut: text/html\n\n”;
$my_cgi = nou CGI;
$numele_tau = $my_cgi->param("nume");
print "Bună ziua $numele_tau!!!";

Primul fișier pe care îl puteți plasa în director domeniul dvs./docs. Ar trebui să plasați al doilea fișier în director domeniul dvs./cgi. Asigurați-vă că verificați drepturile asupra scriptului dvs. CGI. Ele trebuie setate la -rwxr-xr-x sau 755 .

3. Vizualizați modulele PERL instalate

Pentru a verifica modulele PERL instalate, trebuie să efectuați succesiv următorii pași:

  • și rulați comanda:

Aceasta va crea un fișier modules.pl

  • Acum trebuie să îl editați, pentru a face acest lucru, faceți clic pe Inserare și scrieți următoarele:

#!/usr/bin/perl -w

utilizați ExtUtils::Installed;

$instalat = ExtUtils::Installed->new();
foreach $modul ($instalat->module())(
printf "Modul: %s\t\tVersiune: %s\n", $modul, $instalat->versiune($modul);
}

Pentru a ieși din editor și a salva textul pe care tocmai l-ați tastat, apăsați Esc și apoi: wq

perl ./module.pl

4. Instalarea modulelor PERL suplimentare

Puteți instala pe hosting module suplimentare PERL din codurile sursă. Înainte de a începe instalarea, conectați-vă ultima versiune PHP în secțiune Administrare server webGestionarea modulelor PHP găzduiește panoul de control, iar setul actualizat va fi conectat software, care poate include modulul Perl de care aveți nevoie.
Înainte de instalare, trebuie să setați variabilele de mediu, astfel încât modulele instalate să fie disponibile pentru interpret.

  • Pentru a face acest lucru, creați un fișier .bashrc în directorul dvs. de acasă folosind comanda:

cat >> ~/.bashrc<< "EOF"
PERL5LIB=$HOME/PERL/lib:$HOME/PERL/lib/perl5
export PERL5LIB

MANPATH=$HOME/PERL/share/man
export MANPATH
EOF

  • Pentru ca modificările să aibă efect, rulați comanda:

sursa ~/.bashrc

Pentru a instala modulul selectat pentru PERL, trebuie să rulați următoarea secvență de comenzi:

  • pe pagina http://search.cpan.org/ găsiți modulul necesar, de exemplu, Net::SMPPși copiați linkul pentru a descărca arhiva cu codurile sursă ale modulului,
  • conectați-vă la găzduirea dvs. prin SSH și accesați directorul pentru fișiere temporare
  • încărcați arhiva pe găzduirea dvs. folosind link-ul găsit folosind wget

wget http://search.cpan.org/CPAN/authors/id/S/SA/SAMPO/Net-SMPP-1.12.tar.gz

  • despachetați arhiva și mergeți la directorul cu codurile sursă ale modulului

tar -xf Net-SMPP-1.12.tar.gz
cd Net-SMPP-1.12

Instalarea trebuie efectuată într-un director separat, de exemplu, /home/login/PERL, Unde log in- identificatorul serviciului de gazduire prin specificarea variabilei INSTALL_BASE.

  • Makefile.PL utilizați comenzi:

perl Makefile.PL INSTALL_BASE=$HOME/PERL
face
face instalarea

  • Pentru a instala un modul folosind un fișier Build.PL utilizați comenzi:

perl Build.PL
./Build --install_base $HOME/PERL
./Build install --install_base $HOME/PERL

Pentru a utiliza modulele instalate într-un script Perl, trebuie să le conectați adăugând următoarele linii la fișierul script:

utilizați lib „/home/login/PERL/lib”;
utilizați lib „/home/login/PERL/lib/perl5”;
utilizați Net::SMPP;

Pentru ca serverul web Apache să funcționeze cu module suplimentare, trebuie să activați modulul în panoul de control al găzduirii env_moduleși adăugați următoarele rânduri în fișier .htaccessîn directorul rădăcină al site-ului sau în directorul cu scripturi CGI:

SetEnv PERL5LIB /home/login/PERL/lib:/home/login/PERL/lib/perl5

unde login este identificatorul serviciului de găzduire.

5. Posibile erori

Eroare 403

Dacă vedeți un mesaj de eroare 403 când accesați un script, aceasta înseamnă că scriptul are drepturi de acces incorecte. Scripturile CGI trebuie să aibă atributul de execuție setat (permisiunea 755 sau -rwxr-xr-x). Atributele pot fi modificate utilizând Managerul de fișiere din Panoul de control.

Eroare 500

Dacă, atunci când rulați scriptul, vedeți un mesaj despre eroarea a 500-a, aceasta înseamnă că există o eroare în script, din cauza căreia traducătorul Perl nu își poate finaliza munca cu succes Eroarea poate fi fie o eroare de sintaxă (de exemplu, ați uitat undeva - apoi închideți un citat sau o acoladă), și una logică, de exemplu, ca urmare a unora dintre acțiunile dvs., apare împărțirea la zero. Pentru a înțelege cauza erorii, trebuie să vă uitați la fișierele jurnal ale serverului web, care sunt stocate în directorul /var/.

Andrei Novikov

Ce este Perl?

Perl este un limbaj interpretat creat de programatorul Larry Wall pentru procesarea de texte și fișiere mari și înseamnă Practical Extraction and Report Language. Cu Perl, de exemplu, puteți crea un script care deschide unul sau mai multe fișiere, procesează informațiile și scrie rezultatele.

Odată cu inventarea World Wide Web, Perl s-a dovedit a fi un instrument excelent pentru interacțiunea cu serverele web prin intermediul Common Gateway Interface (CGI). Comenzile Perl pot prelua cu ușurință date dintr-un formular HTML sau altă sursă și pot face ceva cu ele.

Cum procesează Perl datele din formular

Perl este suficient de flexibil pentru a gestiona intrarea. De exemplu, dacă un utilizator introduce informații într-un formular de înregistrare, scriptul Perl le poate procesa în mai multe moduri, cum ar fi:

  • adăugați-le într-un fișier text,
  • introduceți-le în baza de date,
  • lipiți-le într-un e-mail,
  • adăugați-le la o pagină web existentă,
  • creați o nouă pagină web,
  • afișați-le în fereastra browserului.

Unele dintre aceste exemple sunt discutate în lecția noastră.

Cum sunt generate paginile web din mers

Ceea ce este cel mai impresionant este faptul că Perl poate fi folosit pentru a crea pagini web din mers ca răspuns la o solicitare sau o acțiune a utilizatorului. Noua pagină poate fi

  • multumesc pentru completarea formularului
  • pagina de confirmare cu posibilitatea de a edita
  • solicitarea de date suplimentare
  • rezultatul unei interogări în baza de date sau al unei interogări de căutare

Această caracteristică aduce o adevărată interactivitate site-ului dvs. Astfel de scripturi vor permite serverului web să răspundă automat la un anumit set de solicitări ale utilizatorului, furnizând date în forma cerută de utilizator.

Care este diferența dintre un program și un script?

Înainte de a începe să lucrați cu Perl, trebuie să înțelegeți diferența dintre un program și un script. Ambele folosesc un set de instrucțiuni pentru a efectua o anumită sarcină, dar programul este compilat într-un format binar eficient, permițându-i să se execute rapid pe o anumită platformă, în timp ce scriptul este stocat în formatul său original de text.

Datorită faptului că scripturile sunt mult mai scurte decât programele, ele se execută și destul de repede.

Datorită faptului că scriptul nu trebuie compilat înainte de lansare, acesta devine un instrument excelent pentru crearea și efectuarea rapidă a corecțiilor în dezvoltarea părților interactive ale unui nod.

Alternative la Perl

Există mai multe alternative la utilizarea Perl:

  • C, Visual Basic - limbaje de computer mai tradiționale pentru procesarea datelor de intrare. Trebuie să fie compilat pentru o anumită platformă.
  • ActiveX - activarea componentelor software care rulează în browser.
  • JavaScript, VBScript - oferă o anumită interactivitate paginilor HTML pe care HTML nu o poate oferi.
  • Cold Fusion este un program terță parte pentru conectarea formularelor cu bazele de date.
  • PHP/FI este un alt program terță parte pentru conectarea formularelor la baze de date.

În ciuda acestui fapt, Perl este de departe cel mai simplu, mai rapid și, în același timp, foarte puternic mijloc de a adăuga interactivitate site-ului tău.

Ce ai nevoie pentru a rula Perl

Pentru a rula Perl, sistemul dumneavoastră va avea nevoie de mai multe componente:

  1. Un script scris de dvs. sau oferit de altcineva, salvat într-un fișier text.
  2. interpret Perl. Orice script Perl conține calea către acest program în prima linie.
  3. Pagina web de pe care va fi lansat acest script. Poate conține un formular sau doar un link dacă scriptul nu necesită date de intrare.
  4. server web. Interacțiunea dintre pagina web și script este realizată de server. Prin urmare, trebuie să aveți acces la un server web cu capacitatea de a scrie și rula scripturi pe acesta.

De unde să obțineți Perl

Există multe locuri diferite de unde puteți obține informații despre cele mai recente versiuni de Perl.

  • Informații generale despre Perl - http://www.perl.com/perl/index.html
  • Perl pentru UNIX - http://www.perl.com/perl/info/software.html
  • Perl pentru Win32 - http://ntperl.hip.com

Etapele creării unui scenariu

După ce ați instalat software-ul necesar pe computer, trebuie să faceți câțiva pași pentru a rula Perl pe nodul dvs.:

  1. Creați un formular pentru a apela scriptul.
  2. Creați scriptul în sine.
  3. Depanați scriptul. Verificați erorile (dacă este posibil, este mai bine să verificați toate căile posibile de execuție a programului).
  4. Plasați scriptul pe server și nu uitați să-i acordați drepturi de execuție.
  5. Conectați scriptul la formular inserând numele acestuia în parametrul de acțiune al etichetei formularului. De exemplu:
  1. Asigurați-vă că scriptul funcționează corect cu formularul.

Părțile principale ale unui script Perl

În general, orice script Perl constă din patru părți cheie:

  1. Tinctură. Prima parte a scriptului pornește neapărat interpretul și setează variabilele utilizate în corpul scriptului. Pentru a rula interpretul, trebuie să cunoașteți calea corectă către program.
  2. Citirea datelor de intrare. Această parte „citește” și stochează datele de intrare în variabile într-o formă convenabilă pentru procesare. Această parte este de obicei aceeași în toate scripturile.
  3. Prelucrarea datelor de intrare. Această parte procesează datele introduse în consecință. Poate fi simplu (aproximativ 5 rânduri) sau foarte complex (mai mult de 1000 de linii) în funcție de sarcina efectuată.
  4. Ieșirea rezultatelor. Utilizatorul așteaptă de obicei un fel de răspuns la acțiunile sale. Această parte este destul de ușor de implementat.

Exemplu de script cu un formular

Să luăm acum în considerare pașii pe care i-am descris folosind un exemplu specific. Nu vi se cere să înțelegeți fiecare rând din script, toate vor fi explicate mai jos.

Pasul 1 - Crearea formularului

Pentru simplitate, să creăm un formular care conține un singur câmp și care permite utilizatorului să-și înregistreze numele. Să scriem următorul text în editor:

Formularul de testare Introdu numele tau:

Salvați fișierul pe disc.

Pasul 2 - Crearea scriptului

Scriptul de mai jos preia datele introduse, le salvează într-un fișier și afișează un mesaj care conține un link către fișierul cu numele salvat. Tastați textul programului în editor și salvați-l în fișierul testform.pl în directorul cgi-bin al serverului dvs. web. Asigurați-vă că prima linie a programului conține calea corectă către programul interpretor (pentru a localiza programul pe UNIX, utilizați comanda which perl; pe Windows, căutați fișierul perl.exe). De asemenea, asigurați-vă că calea către fișierul de ieșire este calea corectă către zona de stocare a documentelor a serverului web. În cele din urmă, corectați adresa URL pentru a se potrivi cu adresa serverului dvs.

#!/usr/local/bin/perl #<-- ПРОВЕРЬТЕ ЭТО # Read and parse input from the web form read(STDIN, $buffer, $ENV{"CONTENT_LENGTH"}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%()/pack("C", hex($1))/eg; $value =~ s///g; $input($nume) = $valoare; ) # Salvați rezultatul utilizatorului într-un fișier $targetfile = "/usr/local/www/htdocs/names.html"; #<-- ПРОВЕРЬТЕ ЭТО open (NAMEFILE, ">>$targetfile"); printează NAMEFILE "

Nume: ",$input("nume_utilizator"),"

\n"; imprimați NAMEFILE "


\n"; închideți (NAMEFILE); # Trimiteți un mesaj înapoi utilizatorului printare "Tip conținut: text/html\n\n"; imprimare "

Vă mulțumim că ați completat formularul

\nFaceți clic pe „; imprimați „aici”; #<-- ЗАМЕНИТЕ ЭТО print ", чтобы увидеть Ваш ввод.\n";

Pasul 3 - Testarea scriptului

După verificarea vizuală a scriptului pentru erori - absența lui „;” la sfârșitul liniilor, prezența parantezelor și ghilimele nepereche, etc., rulați scriptul pentru a verifica direct din linia de comandă, mergând mai întâi în directorul cgi-bin. Iată câteva exemple despre cum se face acest lucru:

./testform.pl /usr/local/bin/perl testform.pl c:\perl\perl.exe testform.pl

Dacă scriptul conține erori, veți vedea un mesaj ca

eroare de sintaxă la testform.pl linia 18, lângă „deschis” Execuția testform.pl a fost întreruptă din cauza erorilor de compilare.

În acest caz, verificați textul de lângă linia specificată. Amintiți-vă că cauza erorii poate fi de mai multe, uneori destul de multe, linii mai mari. Salvați scriptul corectat și testați-l până când produce rezultatul corect:

Tip de conținut: text/html

Vă mulțumim că ați completat formularul

Faceți clic aici pentru a vedea intrarea dvs.

Pasul 4 - Testarea scriptului cu formularul

Dacă scriptul funcționează singur, îl puteți testa cu formularul:

  1. Asigurați-vă că serverul web rulează.
  2. Lansați browserul.
  3. Tastați adresa URL în care se află formularul dvs. (rețineți că linia trebuie să înceapă cu http://, nu cu fișier://.
  4. Introduceți numele dvs. în câmpul de formular și faceți clic pe butonul „Înregistrare”.
  5. Ar trebui să vedeți un mesaj ca acesta:

Vă mulțumim că ați completat formularul
Clic Aici pentru a vedea contribuția dvs.

Aceasta este pagina generată de script-ul din zbor. Dacă primiți un mesaj de eroare de server, verificați dacă scriptul este localizat corect și valoarea parametrului de acțiune din eticheta de formular este corectă.

  1. Dacă vedeți o pagină generată corect, faceți clic pe link. Ar trebui să vedeți o pagină nouă creată de script care arată cam așa:

Nume: Novikov

Dacă nu vedeți acest lucru, verificați dacă calea din variabila $targetfile este corectă și adresa URL din penultima linie a scriptului este corectă. În caz contrar, formularul și scriptul funcționează corect împreună. Ați creat cu succes prima aplicație web.

Discuție: Configurarea scriptului

După cum am menționat deja, prima parte a scriptului conține setări care includ mai multe elemente. Prima linie definește calea către programul interpretor:
#!/usr/local/bin/perl pentru UNIX
sau
\Program Files\Perl5\perl.exe pentru Win32

De asemenea, la începutul scriptului, pentru comoditate, puteți plasa un comentariu despre ce este destinat acest script.

Comentariile pot fi localizate oriunde în program și încep cu simbolul #:
# Acesta este un comentariu sau
deschide(NAMEFILE, ">$testfile"); #Deschide fișierul pentru scriere...

De asemenea, este o practică bună să definiți toate constantele și variabilele globale la începutul scriptului. (Vă sfătuiesc să înregistrați toate căile ca variabile, mai ales dacă programul conține mai mult de 50 de linii, pentru confortul schimbării locației fișierelor). De exemplu:
$homepage = "http://nume_server/home/index.html";

Toate variabilele obișnuite din Perl încep cu un caracter $. Există multe alte tipuri de variabile, cum ar fi matrice și altele asemenea.

Toate rândurile programului, cu excepția primei și a comentariilor, trebuie să se termine cu „;”.

Discuție: Citirea datelor dintr-un formular

Acum trebuie să „citim” intrarea utilizatorului în variabilele Perl. După ce utilizatorul face clic pe butonul Trimite de pe formular, browserul trimite serverului numele scriptului și datele preluate din formular. Datele sunt transmise scriptului prin intrare standard.

Să presupunem că formularul conține următoarele câmpuri:

În acest caz, datele vor fi trimise către script în următorul format:
user_name=Andy+Novikov&co_name=TeleSputnik&phone=(812)+123-45-67

Scriptul Perl trebuie să analizeze acest șir bucată cu bucată și să îl stocheze în variabile pentru procesare ulterioară. Liniile care efectuează aceste acțiuni sunt destul de standard:
citeste(STDIN, $buffer, $ENV("CONTENT_LENGTH"));

Această linie citește datele de la intrarea standard și le plasează în variabila $buffer. Lungimea șirului este transmisă scriptului prin variabila de mediu CONTENT_LENGTH.

Odată ce datele sunt plasate în variabila $buffer, le puteți împărți în variabile separate cu valorile corespunzătoare:
@pairs = split(/&/, $buffer);

Acum avem o matrice @pairs cu următoarele variabile șir:
user_name=Andy+Novikov
co_name=TeleSputnik
telefon=(812)+123-45-67

Acum trebuie să împărțim aceste linii în perechi parametru-valoare:
foreach $pereche (@perechi) ( ($nume, $valoare) = split(/=/, $pereche); $valoare =~ tr/+/ /; # înlocuiți plusurile cu spații $valoare =~ s/%() /pachet("C", hex($1))/ex. $valoare =~ s/;//g; $input($nume) = $valoare; )

În acest fel obțineți o matrice de variabile, al căror index este valoarea parametrului nume al câmpului formular, iar valoarea este datele introduse în câmpul corespunzător.

Discuție: Ce să faci cu datele?

Următorul pas este prelucrarea datelor. Dar cum? Totul depinde de ce vrei să faci cu datele. În exemplul nostru, creăm un nou document HTML pe baza datelor primite. Mai jos vom analiza câteva exemple simple despre ceea ce se poate face cu datele obținute. Vă rugăm să rețineți că nu facem nicio încercare de a valida conținutul câmpurilor. Deși în scenariile reale aceasta este o acțiune dezirabilă și uneori necesară.

Discuție: Scrierea în fișiere

Unul dintre lucrurile pe care le puteți face cu datele este să le scrieți într-un fișier. Perl oferă un set de funcții pentru deschiderea, procesarea și închiderea fișierelor. În acest fel, puteți crea un nou document HTML, puteți adăuga date la un document HTML existent sau puteți salva datele într-un fișier text pentru procesare ulterioară.

Funcția de deschidere a fișierului arată astfel:
deschide(HANDLE, „nume”); # Deschideți fișierul pentru citire open(HANDLE, ">nume"); # Deschideți un fișier pentru scriere open(HANDLE, ">>name"); # Deschideți fișierul pentru a adăuga la sfârșit

HANDLE este orice nume temporar pe care îl veți folosi ca identificator de fișier atunci când efectuați operațiuni. Odată ce fișierul este deschis, puteți scrie în el folosind funcția de imprimare:
print HANDLE „Acest text va fi plasat în fișier așa cum este.\n”; print HANDLE "În acest caz, variabila ",$variable," va fi plasată în text."; print HANDLE "Variabila $variabila poate fi oricum plasata in text.\n"; print HANDLE "Citate și alte caractere speciale \; trebuie să \"tăiați\".\n";

După finalizarea operațiunilor cu fișierul, trebuie să îl închideți:
închide (MANEREA);

După aceasta, toate datele înregistrate vor fi salvate pe disc.

Înainte de a scrie într-un fișier, trebuie să vă asigurați că serverul web are acces la directorul în care se află fișierul și are permisiunea de a scrie în acest fișier.

Rețineți că funcția de închidere ar trebui să fie situată cât mai aproape posibil de ultima funcție de scriere a fișierului. Acest lucru se datorează faptului că serverul web rulează într-un mediu multi-utilizator, iar scriptul poate fi rulat simultan de mai mulți utilizatori. Când deschideți un fișier pentru scriere, acesta (fișierul) este blocat și alte instanțe ale scriptului nu îl vor putea deschide, ceea ce va provoca o întârziere în executarea cererii.

Exemplu: crearea unei noi pagini HTML

Următorul exemplu poate părea complicat la început, dar tot ce face este să scrie câteva informații într-un fișier.

Datorită faptului că creăm o pagină web, fișierul conține etichete HTML împreună cu text simplu. Amintiți-vă că \n inserează pur și simplu o nouă linie în text pentru vizualizarea ușoară a fișierului generat mai târziu.

Toate intrările din formular sunt conținute în variabilele $input(field_name). La imprimare, astfel de variabile trebuie plasate între ghilimele și separate prin virgule.

# Definiți o variabilă care conține calea către fișierul de scris $newfile = "c:\webserver\htdocs\mynewpage.html"; # Deschideți fișierul folosind identificatorul USERINFO deschis (USERINFO, ">$newfile"); # Formează conținutul tipări USERINFO " \n \n"; imprimați USERINFO " Informații de înregistrare\n\n"; imprimați USERINFO "\n \n

Detalii inregistrare:

"; imprimați USERINFO "\n

\n"; printează USERINFO "Nume: ", $input("nume_utilizator"),"\n
"; printează USERINFO "Companie: ", $input("co_name"),"\n
"; printează USERINFO "Telefon: ", $input("telefon"),"\n

\n\n"; imprimați USERINFO "\n\n\n"; # Închide fișierul close (USERINFO);

Exemplu: Adăugați la sfârșitul fișierului

Scrierea într-un fișier existent este ușor atunci când doriți să adăugați informații noi la sfârșitul fișierului. De exemplu, pentru a adăuga noi informații despre utilizator la fișierul creat mai sus, veți avea nevoie de următorul script:

# Definiți o variabilă care conține calea către fișierul de scris $targetfile = "c:\webserver\htdocs\mynewpage.html"; # Deschideți fișierul folosind identificatorul NEWINFO open (NEWINFO, ">>$targetfile"); # Adăugați date noi în fișier: imprimați NEWINFO „\n\n”; print NEWINFO "Nume: ", $input("nume_utilizator"),"\n
"; printează NEWINFO "Companie: ", $input("co_name"),"\n
"; imprimă NEWINFO "Telefon: ", $input("telefon"),"\n

\n\n"; închide (NEWINFO);

Exemplu: Adăugarea la mijlocul unui fișier existent

O sarcină mai dificilă este să inserați date noi în mijlocul fișierului. Observați că în primul exemplu am inserat o linie de comentariu în fișier care arăta astfel:

Acest comentariu va servi drept marker pentru noi în cazul în care trebuie să inserăm date noi. Acest exemplu nu conține o soluție complet elegantă, dar este ușor de implementat și de înțeles. Utilizează un fișier temporar, deși puteți face fără el:

# Definiți o variabilă care conține calea către fișierul original $origfile = "/pathname/originalfile.htm"; # Definiți o variabilă care conține calea către fișierul temporar $newfile = "/pathname/newfile.htm"; deschide(INFILE, "<$origfile"); open(OUTFILE, ">$newfile"); în timp ce ($line = ) ( printf OUTFILE $line; if ($line =~ //i) ( # Adăugați date noi în fișier: imprimați OUTFILE „\n\n”; imprimați OUTFILE „Nume: „, $input(„nume_utilizator”),”\n
"; printează OUTFILE "Companie: ", $input("co_name"),"\n
"; printează OUTFILE "Telefon: ", $input("telefon"),"\n

\n\n"; ) ) # Închideți fișierele close(INFILE); close(OUTFILE); # Ștergeți fișierul original și redenumiți-l pe cel nou la deconectarea originală($origfile); rename($newfile, $origfile);

Exemplu: Trimiterea datelor prin e-mail

Uneori este posibil să doriți ca datele introduse într-un formular să fie trimise la o adresă de e-mail.

Pentru a face acest lucru, veți avea nevoie de un program de trimitere a e-mailurilor cu o interfață de linie de comandă. Sub UNIX, acesta ar putea fi sendmail sau mail. În acest exemplu, datele sunt trimise folosind programul sendmail. În loc să scriem într-un fișier, folosim scrierea într-un conduct special deschis:

# Adresa de e-mail $sendto = "webmaster\@telesputnik.ru"; # Deschide canalul deschis (MAIL, "| /usr/bin/sendmail $sendto") # Imprimă pe canal într-un format special print MAIL "De la: server web\n"; print MAIL „Către: $sendto\n”; print MAIL „Subiect: Introducerea datelor noi”; print MAIL "Cineva a folosit formularul pentru a introduce date noi"; print MAIL "Iata ce a introdus:"; print MAIL "Nume: ", $input("nume_utilizator"),"\n"; print MAIL "Companie: ", $input("co_name"),"\n"; print MAIL "Telefon: ", $input("telefon"),"\n "; # Trimiteți o scrisoare prin închiderea canalului de închidere (MAIL);

Discuție: Crearea paginilor web din mers

Ultima parte importantă a unui script Perl este trimiterea rezultatului înapoi către utilizator. Acest lucru se realizează prin aceeași imprimare, dar fără identificatorul de fișier sau canal. Tot ceea ce este tipărit la ieșire standard formează documentul curent în fereastra browserului. De exemplu:

printează „Tipul conținut: text/html\n\n”; imprimare " \n \n Mulțumesc\n"; imprimare " \n

Vă mulțumim că ați completat formularul

"; print "V-am primit numele, locul de muncă și numărul de telefon","; print " pe care le vedeți mai jos:
\n"; printează "Nume: ", $input("nume_utilizator"),"\n
"; printează "Companie: ", $input("co_name"),"\n
"; printează "Telefon: ", $input("telefon"),"\n

\n\n"; printeaza "\n";

Atenție la prima linie. Această linie conține informații despre tipul de date returnate. În acest caz, este necesar un dublu transfer de stoc. Această pagină va fi returnată utilizatorului aproape imediat după ce acesta face clic pe butonul Trimite.

Vă rugăm să rețineți că acesta este doar unul dintre multele exemple despre cum poate arăta o pagină din mers. În principiu, puteți genera un document HTML de orice formă și conținut.

Eram ocupat, implicat în autoeducație, pentru că... Am simțit că sunt blocat în același lucru. Îmi extind orizonturile, învăț lucruri noi, mă străduiesc pentru ceva, este foarte interesant și necesită mult timp.

Acum la obiect.

Sistemul meu de operare este ubuntu ++ trebuie să stau în mod constant în consolă pentru lucru. Foarte des apare sarcina de a schimba rapid ceva dintr-un fișier conform unui șablon. Răspuns neîntrerupt = sed. La un moment dat am citit despre asta, dar mi-am dat seama că folosind perl pot face același lucru. Timpul a trecut, am uitat complet de sed, dar și perl a început să fie uitat și în mod constant nu găsesc un exemplu de scripturi pe o singură linie.

Acum, în ordine.

Dat.
Există un fișier xx.txt care conține numere de la 1 la 5, fiecare număr este o linie nouă.



1
2
3
4
5

Aș dori să înlocuiesc toate aparițiile liniei 3 cu ceva al meu, să fie șirul „bună ziua”

Soluţie:

cd@laptop:~/data/tmp$ perl -ig -ne "s/3/hello/;print $_; " xx.xx
cd@laptop:~/data/tmp$ cat xx.xx
1
2
Buna ziua
4
5


cd@laptop:~/data/tmp$ perl -ig -pe "s/3/hello/; " xx.xx
cd@laptop:~/data/tmp$ cat xx.xx
1
2
Buna ziua
4
5
cd@cd-acer:~/data/tmp$ ls *g
9.jpg xx.xxg

Explicaţie.

perl vă permite să rulați scripturi cu o linie fără a crea un fișier de cod de script.

Exemplu:

cd@laptop:~/data/tmp$ perl -e "printează "test\n""
Test
cd@laptop:~/data/tmp$

Opțiunea -e este responsabilă pentru aceasta, urmată de codul care urmează să fie executat.

Scripturile pe o linie, după cod, pot lua un fișier ca parametru și, de asemenea, puteți forța ca codul specificat -e să fie executat pentru fiecare linie.

Exemplu:

cd@laptop:~/data/tmp$ perl -ne "printare ;" xx.xx
1
2
Buna ziua
4
5

Acestea. în acest caz, i-am cerut pearl să imprime șirul implicit și de atunci Dacă a fost specificată opțiunea -n, atunci această comandă a fost aplicată fiecărei linii a fișierului xx.xx, adică. am pisica

Există, de asemenea, o opțiune -p, care tipărește o linie după executarea codului. Acestea. Este logic ca comanda să fie ca


perl -ne "dosmth; print $_;" fişier

va fi similar

perl -pe „dosmth” fișier

Ei bine, acum încheiem. Am reușit să putem efectua orice operație pe fiecare linie dintr-un fișier și să o tipărim în stdout, dar declarația originală a problemei suna ca înlocuirea liniilor dintr-un fișier din mers. Exact pentru asta este opțiunea -i.


perl -i -pe fișierul „dosmth”.

va executa codul dosmth pentru o singură linie și îl va înlocui în fișierul specificat.

opțiunea -i poate lua un parametru opțional, iar apoi scriptul va face o copie de rezervă a fișierului înainte de a începe lucrul


cd@laptop:~/data/tmp/1$ perl -ibak -ne "print;" 1.txt
cd@laptop:~/data/tmp/1$ ls
1.txt 1.txtbak
cd@laptop:~/data/tmp/1$ cat 1.txt
1
2
3
cdlaptop:~/data/tmp/1$ cat 1.txtbak
1
2
3
cd@laptop:~/data/tmp/1$

Acum soluția în sine ar trebui să fie clară și ar trebui să fie clar și de ce am dat două opțiuni.

A apărut o problemă simplă: într-una dintre configurații trebuie să măriți una dintre valori cu una, să fie numărul de build.

Să luăm un exemplu de fișier de configurare

cd:$cat config
Cheie1 Valoare2
build=numeproiect.005
încă o linie

Să presupunem că trebuie să obținem aceeași configurație, dar cu build=projectnam.006


perl -i -pe "s/(nume proiect\.)(\d+)/sprintf("%s%03d", $1, $2+1)/e" configurație

Explicații.

Am explicat mai sus.

Ce sa schimbat? La sfârșitul expresiei regulate, a fost adăugat steag-ul e, ceea ce înseamnă că partea dreaptă a expresiei va fi executată ca cod perl și numai după execuție rezultatul va fi înlocuit.

Bineînțeles că ai putea face ceva de genul


perl -pe "s/(nume proiect\.)(\d+)/$1 . ($2+1)/e" configurație
Cheie1 Valoare2
build=numeproiect.6
încă o linie

! opțiunea -i a fost eliminată, am vrut ca fișierul să nu se schimbe și rezultatul să fie în ieșire

După cum puteți vedea, două zerouri inițiale dispar, motiv pentru care a fost folosită funcția sprintf

4 comentarii:

Anastasia a spus...

Mulțumesc. Util :)
Dacă nu există obiecții, am furnizat un link către blogul dvs. în http://aal-blog.blogspot.com/2009/10/stroka1-stroka2.html

a spus...

Nici o problemă. Mă bucur că măcar ceva a fost util.

Anonim a spus...

Am o întrebare...
Este posibil să rulați un script și să îi oferiți date de procesat?
De exemplu, rulez un script pentru combinarea a două baze de date, există o solicitare de luni de zile... apoi rezultatul este trimis la imprimare...
adica as dori ca datele sa intre in script cand este lansat...
Vă mulțumesc anticipat

Scripturile CGI pot fi considerate cele mai dificil de depanat aplicații. De regulă, acestea sunt depanate pe serverul unde vor lucra. În același timp, procesul de găsire a erorilor, cum ar fi erorile de sintaxă, devine o sarcină foarte dificilă, deoarece Datorită specificului interfeței CGI, mesajele de eroare din etapa de compilare nu „ating” operatorul care depanează scriptul în timp ce se află pe computerul client.

Și cu plățile bazate pe timp pentru internet, depanarea scripturilor CGI devine, de asemenea, o sarcină destul de costisitoare :).

Scopul acestui articol este de a prezenta câteva metode și tehnici menite, în opinia autorului, să simplifice semnificativ procesul de depanare a scripturilor CGI în Perl, precum și să evidențieze unele dintre cele mai frecvente greșeli la scrierea lor.

Pregătirea mediului de lucru.

Pentru a scrie și a depana scripturi CGI în Perl, este convenabil să utilizați un server Web local, de ex. Server web instalat pe computer. Mai mult, din punctul de vedere al browserului, lucrul cu un astfel de server nu va fi diferit de lucrul cu un server pe Internet. Aproape orice server web Windows poate fi folosit ca server web local; trebuie doar să suporte rularea scripturilor CGI.

Cele mai simple opțiuni includ PWS (Personal Web Server) de la Windows9x sau IIS (Internet Information Server) de la NT. Cu toate acestea, dacă site-ul dvs. folosește lucruri precum SSI, atunci este mai bine să instalați Apache pentru Windows. Majoritatea furnizorilor de găzduire de astăzi au Apache Web Server care rulează UNIX, așa că o astfel de compatibilitate nu va strica. În plus, Apache permite utilizarea unor variabile de mediu CGI suplimentare non-standard, astfel încât scripturile CGI care vor rula „cu adevărat” pe Apache sunt mai bine depanate pe el (deși aceasta este părerea mea).

Serverul local are un „nume de domeniu” localhost și o adresă IP de 127.0.0.1. În consecință, este accesat printr-un URL precum:

Http://localhost/...

Cu toate acestea, pentru a executa scripturi CGI în Perl, instalarea unui server web nu este suficientă, de asemenea, trebuie să instalați Perl în sine. Aș recomanda Perl pentru Win32 de la ActiveState. După instalarea Perl, acesta trebuie să fie „înregistrat” în setările serverului Web, astfel încât să fie un Script Handler pentru scripturile Perl. Diferite servere Web fac acest lucru diferit, citiți documentația pentru serverul dvs. Pentru PWS și IIS, instalarea Perl este o sarcină specială. În majoritatea serverelor web pentru Windows, apartenența unui script CGI la un anumit „tip” (script Perl, alt script...) și, în consecință, handler-ul este determinată de extensia numelui fișierului. Dacă acesta este cazul pe serverul dvs., trebuie să instalați extensia pentru scripturi CGI în Perl care se potrivește cu furnizorul dvs. de găzduire (standardul de facto este *.cgi, uneori *.pl). În Apache, proprietatea unui script este determinată nu de extensia sa, ci de linia „#!...” de la începutul scriptului, ca în aproape toate serverele UNIX.

Când instalăm toate cele de mai sus, este foarte important pentru noi să putem rula scripturi Perl „fără un server web”, adică. ca programele obișnuite. Acest lucru este foarte convenabil atunci când le verificați pentru erori de sintaxă.

Puteți verifica instalarea corectă a tuturor prin scrierea unui script simplu:

#!(calea către Perl) print "Tip de conținut: text/plain ; set de caractere=windows-1251\n\n"; imprimare "";

Salvați acest script într-un fișier, de exemplu, test.cgi și puneți acest fișier în folderul dvs. cgi-bin.

Acum testați scriptul lansând browserul și executând adresa URL:

Http://localhost/cgi-bin/test.cgi

Dacă totul este în regulă, ar trebui să vedeți următoarea ieșire în fereastra browserului dvs.:

Scenariul a funcționat cu succes! Felicitări!

Dacă, în loc de această ieșire de script, ați văzut pe ecran scriptul în sine sau ceva de genul „Acces refuzat”, „Permisiune refuzată”, „Interzis” sau nu ați văzut deloc nimic (ca atunci când încărcați un document „gol”), apoi verificați setările serverului dvs. web - cel mai probabil, ați setat incorect drepturile de acces la folderul dvs. cgi.

Acum să încercăm să rulăm scriptul nostru CGI ca un program Perl obișnuit. Să mergem la un shell de linie de comandă (de exemplu, FAR manager) și să tastam:

Perl (adresa scriptului dvs.)

Ca rezultat, ar trebui să vedeți rezultatul:

Scenariul a funcționat cu succes! Felicitări!

În loc de cuvinte din ultima linie, „abracadabra” este posibil - este în regulă; pur și simplu există o nepotrivire între codificările din script și shell-ul în care îl executăm. Principalul lucru este că funcționează.

Dacă ambele teste de mai sus au avut succes, felicitări! Acum puteți depana majoritatea scripturilor CGI de pe computer fără să plătiți furnizorului dvs. un ban pentru asta! Acum ai propriul tău „internet în miniatură” :)))

Tehnici de depanare a scripturilor.

O eroare de sintaxă destul de comună este omiterea „;” la sfârşitul declaraţiei. (Acest lucru este valabil mai ales pentru cei care sunt obișnuiți cu BASIC, unde separatorul de linii este separatorul dintre operatori. În Perl, ca și în C/C++, toate avansurile de linie, întoarcerile de cărucior și tabulatorii sunt egalate ca importanță cu un spațiu și sunt numite „caracterele de spații albe” nu sunt operatori. Singura excepție este utilizarea lor în constantele de tip șir de caractere, unde sunt „eși”, dar aceasta confirmă doar regula că nu separă operatori.)

Deci, dacă scriptul tău conține o eroare de sintaxă, atunci mesajul despre această eroare tot nu va ajunge în browser. Cel mai adesea, dacă există o eroare de sintaxă în script, serverul emite eroarea „500 Internal Server Error”. Ei bine, aceasta chiar este considerată o „eroare internă de server”... Dar pe ce linie se află?!

Dar acum putem rula un script CGI „ca program” și să vedem mesajul de eroare Perl!

Dacă faceți o greșeală deliberată în scriptul de mai sus, eliminând „;” la sfârșitul penultimei rânduri, apoi dacă îl rulăm „prin server”, cel mai probabil vom vedea „500 Internal Server Error” scris cu majuscule. Și dacă îl rulăm „ca program”, vom vedea un mesaj ca următorul:

Eroare de sintaxă la test.cgi linia 3, lângă „print” Execuția test.pl a fost întreruptă din cauza erorilor de compilare.

Prima linie indică faptul că a apărut o eroare de sintaxă în fișierul test.cgi, pe linia 3, lângă cuvântul print. După părerea mea, informații destul de cuprinzătoare! :) (a doua linie spune că execuția scriptului a fost întreruptă din cauza erorilor de compilare).

Acum căutăm linia 3, instrucțiunea print și remediam eroarea. De asemenea, o eroare destul de neplăcută, care duce la, la prima vedere, la un comportament de script complet de neînțeles, este omiterea acoladei de închidere ()). Cel mai adesea Perl va detecta aceasta ca o eroare de compilare, dar am avut cazuri în care nu a fost dată nicio eroare. În general, toate erorile din scripturile CGI pot fi împărțite, în opinia mea, în următoarele categorii:

  1. Sintaxă (erori de compilare);
  2. Erori în interacțiunea cu CGI;
  3. Erori în interacțiunea cu alte programe și/sau fișiere;
  4. Joc de inteligență.

Cel mai convenabil este să găsiți primele erori folosind metoda descrisă mai sus.

Al doilea include ieșirea incorectă a scriptului: scriptul trebuie să-și transmită răspunsul în format HTTP, de exemplu. câmpurile antetului răspunsului, apoi o linie goală și apoi corpul răspunsului însuși. În exemplul de mai sus, linia de titlu a fost scoasă:

Tip de conținut: text/plain ;charset=windows-1251

apoi o linie goală - și corpul răspunsului:

Scenariul a funcționat cu succes! Felicitări!

În acest caz, serverul, după ce a primit un răspuns de la script, analizează antetul emis de acesta, îi adaugă câmpuri suplimentare și linia principală de răspuns. Prin urmare, un script CGI nu trebuie să genereze un titlu complet. De obicei, câmpul Content-Type este obligatoriu, dar în orice caz, o linie goală după antet trebuie să fie

Câteva cuvinte despre așa-numitele scripturi nph-CGI. Acestea sunt scripturi care formează complet antetul HTTP. Prin urmare, serverul nu ar trebui să „analizeze” anteturile emise de astfel de scripturi, ci să transmită totul browserului „ca atare”. De aici și numele - nph (anteturi neparsate - anteturi neparsate). Pentru unele servere, astfel de scripturi trebuie să aibă o anumită structură de nume de fișier (numele trebuie să înceapă cu nph-), pentru altele acest lucru nu este necesar.

De asemenea, erorile de comunicare cu CGI includ specificarea incorectă a variabilelor de mediu CGI, precum și - pentru scripturile care procesează formulare - metoda de transfer a datelor din formular (GET sau POST). În același timp, dacă scriptul așteaptă datele trimise prin metoda POST (la intrarea standard), iar metoda GET este specificată incorect în formular, atunci scriptul se va bloca - va aștepta ca datele să ajungă în standard intrare! Dacă scriptul acceptă date folosind metoda GET și POST este specificat în formular, scriptul se va executa, dar nu va primi date din formular (ca și cum nu ar exista câmpuri în formular).

Pentru scripturile care afișează „imagini” (GIF, JPG), o eroare tipică este modul de transmisie ASCII. Imediat după deschiderea unui fișier cu operatorul deschis, acest fișier este alocat modului de citire/scriere ASCII, destinat „textelor simple” (text/securitate), cum ar fi textul din Notepad.

Toate fișierele care sunt implicate în ieșirea imaginii (inclusiv STDOUT!) trebuie să fie comutate în modul „binar” folosind operatorul Perl:

Fisier binar;

În caz contrar, datele vor fi distorsionate, deoarece vor fi transmise ca text: în primul rând, „capăturile de rând” vor fi înlocuite, iar în al doilea rând, caracterul cu codul 0 va fi perceput ca sfârșitul fișierului.

Erorile în comunicarea cu programe și fișiere externe includ apeluri incorecte, de exemplu, ale comenzilor UNIX sendmail, date etc. Aceasta include și calea incorectă către Perl, scrisă în prima linie după #!.

Cum puteți depana scripturile folosind, de exemplu, sendmail pe o mașină locală dacă (sub Windows) nu aveți sendmail? Cel mai simplu mod este să comentați partea din script care trimite scrisoarea. În cazul general, cel mai probabil arată astfel:

Deschideți EMAIL,"|path_to_sendmail_list_of_recipients"; imprimați EMAIL „....”; ....închideți EMAIL;

unde în declarația deschisă sendmail este deschis, EMAIL este un descriptor de fișier; ar putea fi oricine. Astfel, puteți verifica funcționarea scriptului fără a trimite un mesaj prin E-Mail, dacă acesta este auxiliar (de exemplu, în cărțile de oaspeți care trimit o notificare către webmaster despre o nouă intrare).

O poți face altfel: în loc să deschizi sendmail în comanda deschide, scrieți deschiderea fișierului. Nu este nevoie să schimbi nimic altceva.

În acest caz, atunci când „trimiteți un mesaj”, va fi creat un fișier cu această literă și veți putea controla manual formatul acestuia.

Apropo, deoarece adresa de e-mail are forma utilizator@nume gazdă, iar simbolul @ în Perl este o desemnare a matricei, scrierea „directă” a unei astfel de adrese va provoca o eroare! Prin urmare, trebuie să puneți o bară oblică inversă \ înainte de @. Adică, adresa din linia Perl ar trebui să arate ca user\@hostname . Același lucru este valabil și pentru alte caractere rezervate, cum ar fi $.

In ceea ce priveste comanda date, se poate spune ca in majoritatea cazurilor aceasta poate fi inlocuita cu functia perl

Ora locală scalară

care returnează un șir cu data/ora curentă, de exemplu:

Duminica 22 octombrie 16:11:42 2000

O astfel de înlocuire este foarte posibilă dacă valoarea rezultată a datei/ora nu este analizată de un script CGI, ci este pur și simplu scrisă într-un fișier jurnal (sau folosită „ca atare” în alt mod).

Astfel, în majoritatea cazurilor, funcționarea scriptului poate fi verificată chiar și în absența programelor necesare care sunt standard pentru UNIX.

În ceea ce privește eroarea de conectare la fișiere, ar trebui să menționăm drepturile de acces setate incorect la fișierele auxiliare utilizate de script.

Depanarea finală a scripturilor CGI pe server.

Deci, scriptul tău funcționează bine pe computerul tău local, acum este timpul să-l transferi pe server.

Deci, la ce ar trebui să acordați atenție:

1. Calea către Perl în prima linie.

Schimbați-l în calea către Perl-ul dvs. de găzduire. Când depanați scriptul, fie nu ați avut deloc nevoie de această linie, fie, dacă depanați pe Apache, atunci această cale de pe computer este cel mai probabil diferită.

2. Căi către alte programe utilizate de scriptul CGI.

3. Numele fișierelor accesate de script.

Pe Windows nu există nicio distincție între litere mari și mici în numele fișierelor, de exemplu. A.TXT și a.txt sunt nume identice. În UNIX, pe care funcționează majoritatea serverelor de Internet, literele mari și mici din numele fișierelor sunt caractere diferite. Astfel, un script care deschide fișierul a.txt cu comanda:

Deschideți FILE,"a.TXT";

va funcționa bine sub Windows, dar nu va dori să funcționeze sub UNIX (fișierul nu va fi găsit).

4. Mod pentru încărcarea fișierelor pe server.

Cea mai frecventă greșeală este să descărcați întregul site în modul „binar”. Și dacă nu există probleme speciale cu fișierele html și txt descărcate în acest mod (deși pot apărea), scripturile descărcate în acest fel _nu vor funcționa_. Toate fișierele script CGI, precum și fișierele text pe care le folosesc, trebuie să fie încărcate în modul ASCII.

5. Permisiuni pentru fișiere.

Chiar dacă totul este făcut corect, este puțin probabil ca scriptul să înceapă să funcționeze imediat după ce a fost încărcat pe un server UNIX.

Pentru ca acesta să înceapă să funcționeze, trebuie să setați drepturile de acces pentru fișierele de script CGI și fișierele pe care le folosesc.

De regulă, imediat după încărcarea fișierelor pe site, toate sunt setate la un anumit set de drepturi „standard” (în mod implicit), de exemplu:

Rw-r--r--

În general, toate fișierele din punctul de vedere al accesului necesar la ele pot fi împărțite în 3 grupuri:

  1. fișiere script CGI;
  2. Fișierele utilizate de scriptul CGI pentru a citi;
  3. Fișierele pe care scriptul CGI le folosește pentru a citi și scrie;

De obicei, furnizorul de găzduire care permite utilizarea CGI va specifica ce permisiuni trebuie setate pentru fiecare tip de fișier.

Dacă nu, atunci următoarele setări pot fi folosite ca compromis:

Script CGI - -rwx-r-x-r-x (755); Fișiere de citit - -rw-r--r-- (644); Fișiere de înregistrat - -rw-rw-rw- (666);

ATENŢIE! Unele site-uri de găzduire recomandă alte configurații mai stricte ale drepturilor de acces, care oferă o protecție mai fiabilă împotriva hackingului pentru site-ul dvs. și pentru sistemul în ansamblu! Deci, urmați recomandările furnizorului dvs. de găzduire dacă le aveți!

Se întâmplă că cunosc cel puțin două persoane care ar dori să învețe Perl. Am decis să scriu această postare special pentru ei.

  • Partea 1: Tipuri de variabile (Citiți această parte)

În el veți găsi exemple de programe simple din seria „tipăriți numere de la 1 la 5” și altele asemenea. Întotdeauna mi-a plăcut să învăț din exemple - este mai interesant și mai rapid decât din cărți sau seminarii. De asemenea, puteți să vă uitați la postările de pe acest blog - sunt șanse să găsiți mai multe exemple acolo.

Presupun că la școală/institut ai studiat Pascal/Delphi, C sau cel puțin Basic și nu este nevoie să explici ce sunt o funcție și bucle. Dacă nu este cazul, este în regulă, va trebui doar să petreceți timp suplimentar citind Wikipedia pentru a vă da seama. Dacă nu știți cum să rulați un script bash sau de ce în prima linie a scriptului ar trebui să scrieți ceva de genul #!/bin/sh, va trebui să căutați puțin pe Google pentru a afla.

Mai ales pentru cei care sunt interesați de întrebările „e adevărat că Perl-ul este foarte complicat”, „ce cărți despre Perl le poți recomanda” și chiar „uh... mai este scris în el?”, am scris un Mini- Întrebări frecvente despre Perl, pe care le puteți citi pe HabraHabr. Și pentru cei care nu a întărit multe litere Aici voi face un scurt rezumat al acestuia:

  • Perl este un limbaj de programare modern care a fost scris și va continua să fie scris pentru foarte mult timp.
  • Perl, ca orice alt limbaj de programare, are avantajele, dezavantajele și aplicațiile sale. Există foarte mare clasa de probleme pe care Perl le rezolvă cu 5+.
  • Sintaxa Perl nu este mai complexă decât sintaxa C++ sau Java. Puteți verifica acest lucru citind această postare până la sfârșit.
  • Există tutoriale Perl bune, dar ieftine. De asemenea, puteți găsi cu ușurință o comunitate de programatori Perl online care vorbesc limba dumneavoastră maternă.
  • Perl funcționează bine atât cu sistemele de operare ale familiei UNIX, cât și cu Windows Evil.

Plus: De asemenea, vă recomand să citiți articolele Perl vs Python vs Ruby vs PHP și Priests of Programming. Primul vorbește despre performanța diferitelor limbaje de scripting, al doilea vorbește despre diferența dintre PHP și alte limbaje. Pentru fanii Python, vă sfătuiesc să citiți articolul Test de performanță a scriptului Python. Sper că aceste materiale vă vor ajuta să găsiți răspunsul la întrebarea „ce este bun la Perl”.

Bună ziua %username%!

Deci, haideți să scriem deja primul nostru script Perl!

#!/usr/bin/perl

$nume = shift() ;
print("Bună ziua, $nume! \n") ;

Să rulăm scriptul:

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

Totul este foarte simplu aici:

  • Numele variabilelor scalare (adică nu matrice sau hashuri, ceea ce sunt acestea - vezi mai jos) încep cu un semn dolar.
  • Funcția shift returnează următorul argument de script. Cu alte cuvinte, primul apel la shift() returnează primul argument, al doilea apel returnează al doilea argument și așa mai departe.
  • Funcția print() tipărește șirul transmis ca argument.
  • Puteți înlocui valorile variabile în linie (vezi linia 4). Pentru mai multe informații despre șiruri, vezi mai jos.

Dacă nu este încă foarte clar, este în regulă. Poate că puțină teorie va aduce puțin mai multă claritate.

Tipuri variabile

Există trei tipuri principale de variabile în Perl: scalari(numere și șiruri), matrice- similare cu cele folosite în Pascal sau C (uneori tablourile sunt numite și vectori), și hashuri(matrice asociative).

Scalari am folosit deja în exemplul anterior. Iată câteva exemple de specificare a scalarilor.

#!/usr/bin/perl

$a = 123 ;
$b = - 7,496;
$c = 0xABC; # este egal cu 2748, da, este un comentariu :)
$d = ($a + $b ) / $c ;
$d *= $a ; # la fel ca $d = $d * $a;

$str1 = „bună ziua” ;
$str2 = "$str1, lume" ; # $str2 conține „bună ziua, lume”
$str3 = $a . " \n". $str2 ;
$str4 = "$str1" ; # $str4 conține „$str1”, nu „bună ziua”

Aici setăm numere pozitive și negative, întregi și fracționale, setăm un număr în codificare hexazecimală, adunăm, înmulțim și împărțim - totul ca în C sau Java. Pe lângă operațiile de mai sus, Perl acceptă și operația de exponențiere:

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

Cu șiruri, totul este aproximativ la fel ca în unele PHP. Punctul înseamnă operația de concatenare (adică „lipirea” șirurilor împreună, dacă șirul conține nume de variabile, valorile sunt înlocuite folosind o bară oblică inversă, puteți introduce caractere de tip newline (\n); t), ghilimele (\" ), bara oblică inversă în sine (\\), semnul dolar fără nicio înlocuire de variabilă (\$) și multe altele. Dacă șirul este între ghilimele simple, caracterele din el sunt interpretate „ca atare” , fără substituție variabilă etc.

La fel ca PHP, Perl interpretează scalarii ca numere sau șiruri, în funcție de operație. E simplu:

$int1 = "11" + 22 ;
# ^ șirul „11” este convertit într-un număr,
# după care se efectuează adăugarea, rezultat: 33.
$str1 = „11” . 22;
# ^ numărul 22 este convertit într-un șir,
# după care se efectuează concatenarea, rezultatul este „1122”.

Regulile pentru conversia dintr-un șir într-un număr și invers sunt aceleași ca în PHP:

$str1 = 0 . „abc”;
# ^ rezultatul este „abc”, numărul zero este convertit în șirul gol
$int1 = "aaa" + 1 ;
# ^ rezultatul este 1, nu există numere în șirul „aaa”
$int2 = "12aaa" + 1 ;
# ^ rezultatul este 13, doar primele cifre ale șirului sunt luate în considerare

Apropo, există operatori speciali pentru declararea șirurilor lungi - q și qq:

# similar cu ghilimele simple
$text = q (
Ai 15$?
} ;
# similar cu ghilimele duble
$mesaj = qq (
Bună ziua, $username!
Ce mai faci?
} ;

Lucrul cu Arrays se intampla in felul urmator:

#!/usr/bin/perl

$scalar = "bebebebe" ;
($a, $b) = (1, 2); # la fel ca $a = 1; $b = 2;
@arr = ("aaa" , 123 , $scalar , $a + $b ) ;
print $arr [ 1 ] . " \n";
împinge @arr , $a ;
print pop (@arr) . " \n";

Aici creăm o matrice @arr formată din 4 elemente (linia 5). Apoi scoatem al doilea element (linia 6). Numerotarea elementelor începe de la zero, deci indicele 1 este utilizat pentru a afișa al doilea element. Apoi punem valoarea variabilei $a la sfârșitul matricei (funcția push, linia 7) și o recuperăm și o afișăm imediat (. funcția pop, linia 8).

Vă rugăm să rețineți că numele de matrice încep cu „câine” și nu cu dolar (nu este greu de reținut - simbolurile corespunzătoare sunt similare cu primele litere ale numelor de tip englezesc: $ - scalar, @ - matrice). La accesarea celui de-al doilea element de matrice (linia 6), a fost folosit semnul dolar deoarece elementul de matrice este scalar. La început, acest lucru provoacă multă confuzie, dar în general totul este logic.

În acest script, numim și funcțiile de tipărire și împingere fără paranteze. În Perl, la apelarea unei funcții, oriunde aceasta nu provoacă ambiguitate, parantezele pot fi omise.

Pentru a declara o matrice ale cărei elemente sunt șiruri fără spații, există un operator special - qw:

@arr = qw/aaa bbb ccc/ ;
# similar cu ("aaa", "bbb", "ccc"), doar mai scurt

Hashes sunt similare cu matricele, dar elementele din hash nu sunt ordonate. În acest caz, șirurile pot fi folosite ca cheie prin care este accesat elementul.

#!/usr/bin/perl

% hash = ( # când declarați hashuri și matrice puteți
"x" => 12 , # utilizați întreruperi de linie
y => 53 , # dacă nu există caractere speciale în cheie, ghilimele nu sunt necesare
"z" => - 10,5 , # puteți lăsa o virgulă la sfârșit
) ;

$hash("x"++); Coordonata # x este acum 13
$hash ( y ) --; Coordonata # y este acum 52

# afișează coordonatele
imprimare "x = $hash(x), y = $hash(y), z = $hash(z)\n";

Numele hash încep cu un semn de procent, iar acoladele sunt folosite pentru a se referi la un element (mai degrabă decât parantezele pătrate, așa cum este cazul matricelor). Dacă numele cheii este cunoscut în prealabil, îl puteți specifica fără ghilimele (linia 10).

Apropo, variabilele $test, @test și %test sunt variabile complet independente de diferite tipuri.

În acest moment am vrut să trec la declarații condiționate și bucle for/while, dar mi-am dat seama că există deja prea mult text pentru o postare. Între timp, în culise rămân multe întrebări:

  • Declarații condiționale;
  • bucle for și while;
  • Declaratie de functii;
  • Lucrul cu fluxuri și fișiere;
  • Sintaxă strictă;
  • Folosind module și clase gata făcute.

Voi scrie despre asta într-una din postările următoare. Aș dori să primesc cel puțin câteva comentarii la această postare - interesante/neinteresante, de înțeles/neînțeles și așa mai departe. Apropo, dacă aveți întrebări legate de Perl (nu neapărat legate de această postare), nu ezitați să le întrebați în comentarii!

Sper că această serie de postări despre programarea în Perl vă va ajuta să scrieți primele voastre scripturi simple. În timp, scripturile vor deveni mai complexe, vor folosi tehnologii noi (OOP, expresii regulate) și după un timp vei descoperi că știi suficient despre Perl pentru a împărtăși experiența ta cu alții.