web - perl
Post on 29-Nov-2014
1.621 Views
Preview:
DESCRIPTION
TRANSCRIPT
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Tehnologii Web
Dr. SabinCorneliu BuragaFacultatea de Informatica
Universitatea “A.I.Cuza” – Iasi, Romania
http://www.infoiasi.ro/~busaco/
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Programare Web
Perl – o prezentare generala
Detalii in [CGI, 111‐246]
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Limbajul PerlCaracterizareSubrutine
Procesarea fisierelorExpresii regulateModule Perl
Conceperea de scripturi CGISuportul pentru bazele de date
Resurse
cuprins
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
caracterizare
Practical Extraction and Report Language
Limbaj de programare (compilat/interpretat)
Creat de Larry Wall
20 ani de Perl la 18 decembrie 2007
www.perl.com
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
caracterizare
Utilizat initial la prelucrarea sofisticataa informatiilor textuale
Disponibil gratuit sub forma de distributii, pe o multitudine de platforme
(UNIX/Linux, Windows, Mac OS X,…)
Active Perl pentruWindowsPerl oferit de orice distributie de Linux
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
caracterizare
Procesari rapide ale textelor de mari dimensiuni
Posibilitati de utilizare a expresiilor regulate
Prelucrarea avansata a resurselor sistemului de operaresi a documentelor XML
Conectivitate strinsa cu bazele de date
Facilitati pentru realizarea de scripturi CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
caracterizare
FilosofiaLucrurile simple sa se realizeze usor, iar cele complexe sa nu fie imposibil
de implementat
Modalitati multiple de programare Perl,in functie de experienta dezvoltatorului de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
caracterizare
Modularprogramare procedurala & orientata‐obiect
PortabilExpresiv & puternic – expresii regulate, tablouri si liste, limbaj de sistem(fisiere, procese, socket‐uri,…) etc.
Viteza sporita in dezvoltarea programelorse ofera un compilator‐interpretor
Gratuit
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
caracterizare
Disponibilitate:CPAN (Comprehensive Perl Archive Network)http://www.perl.com/CPAN/
Posibilitati de ajutor:man perlperldoc (i.e. perldoc ‐f split)www.perl.com/perlwww.perldoc.comA se vedea si resursele bibliografice de la final
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
manualul: sectiuni
perl – o trecere în revistă a documentațiilor Perlperlfaq – răspunsuri la întrebările frecvente despre Perlperlsyn – sintaxa limbajului (vezi şi perlrun – execuțiascript‐urilor Perl, perlfunc – funcții predefinite, perlsub – subrutinele Perl)
perldata – structurile de date Perl (vezi şiperlre – expresii regulate, perldsc – introducere înstructuri de date, perlvar – variabile predefinite)
perlop – operatorii şi precedența lorperlmod – modulele Perl…
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
primul program
#!/#!/usrusr/bin//bin/perlperlfor ($i = 0; $i < 10; $i++) {print ("Salut din Perl!\n");
}
Editare cu orice editor de texte favorit: joe primul.plSetarea drepturilor de executie: chmod +x primul.plInvocarea interpretorului Perl pentru executiaprogramului: perl primul.pl sau ./primul.pl
Obligatoriu in UNIX/Linux!
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
sintaxa
Inspirata din limbajul CDelimitatorii intre diverse constructiisunt spatiile albe (spatiul, Tab, newline)
Casesensitive (perl ≠ Perl)Comentarii precedate de caracterul #Instructiuni terminate de ;Parantezele acolade {} sunt delimitatoride blocuri de instructiuni
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
Variabilă = zonă (de obicei contiguă) de memorie în care se stochează o valoare de un anumit tip, zonei fiindu‐Iasociat un nume (identificator al acelei variabile)
Această zonă poate fi publică sau privată, permanentă sautemporară pe parcursul execuției unui program
Numele unei variabile trebuie să înceapă cu o literă şipoate conține caracterele alfa‐numerice şi "_"
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
Scalare (simple)Intregi cu semn, numere flotante, siruri de caractereVariabilele de tip scalar au numele precedat de $Nu trebuie declarate explicit inainte de a fi utilizateImplicit, o variabila numerica are valoarea 0, iar una caracter are valoarea sirul vid "“
$nr_studenti++;$pi = 3.14152965;$limbaj = "Perl";
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
Scalare (simple)Variabilele de tip sir de caractere au valori incadrateintre ghilimele sau apostrofuri
$prenume = "Hermann";$nume = 'Hesse';# variabilele vor fi expandate$scriitor = "$prenume $nume";# variabilele nu vor fi expandate$scriitor2 = '$prenume $nume';
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri indexate
Liste ordonate de valori scalare (numere, siruri)Elementele listei sunt disponibileprin intermediul unui indice numericNumele variabilelor de tip tablou indexatincepe cu @
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri indexate
@limbaje = ("Lisp", "C", "Java", "Perl");@mix = ("Pink", 1974, "Floyd", $pi);$primul_limbaj = $limbaje[0];@primele_3 = @limbaje[0..2]; # sub-tablou
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri indexate
Un tablou poate contine elemente eterogene, de tipuri scalare diferitePentru a adauga si sterge elemente la sfirsitulunui tablou, se vor folosi functiile push() si pop()
push (@limbaje, "Prolog"); $eliminat = pop (@limbaje);
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri indexate
Aflarea lungimii unui tablou
$nr_limbaje = @limbaje; $nr_limbaje = scalar (@limbaje);
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri indexate
Pot fi utilizate si in partea stinga a unei atribuiri($primul, $al_doilea) = @limbaje; ($primul, @restul) = @limbaje; ($studenti, $profesori) = ($absenti, 3);
Elementele se pot ordona cu functia sort()Inversarea unei liste de elemente se poate face cu reverse()
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri asociative
Indicele numeric este substituitde un sir de caractere
Liste de perechi (cheie, valoare)Cheile sau valorile nu sunt ordonateVariabilele de tip tablou asociativ sunt prefixatede simbolul %
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri asociative
%curente = ("realism" => 4,"expresionism" => 10,"modernism" => 33);
$romane_moderne = $curente{"modernism"};
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri asociative
Intre acolade vor fi precizate doar nume de chei, nu valori ale cheilor
Cheile nu pot fi accesate speficind valorile lorintre acolade
O cheie trebuie sa fie unica, dar valorile cheilorpot fi duplicate
Lista cheilor este furnizata de functia keys()Lista valorilor este data de functia values()
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri asociative
Functia each() ofera o pereche (cheie, valoare)@lista_curentelor = keys %curente;($curent, $romane) = each (%curente);Inserarea unui element intr‐un tablou asociativse face printr‐o constructie de genul:
# 10 romane baroce$curente{"baroc"} = 10;
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
Exemplu de parcurgere a unui tablou asociativ:
while (($curent, $romane) = each (%curente)) {print "Din curentul $curent sunt disponibile
$romane romane.\n";}
Sortarea cheilor – functia sort()
# Lista sortata a curentelor @curente = sort (keys (%curente));
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
ComplexeTablouri asociative
Un element se poate elimina cu delete()Existenta unui element se verifica prin exists()
if exists ($curente{"baroc"}) { delete ($curente{"baroc"});
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
Numele $variabila, @variabila si %variabilase refera la tipuri diferite de variabile sise pot utiliza fara a genera ambiguitati
$pinguini ≠%pinguini ≠@pinguini
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
Variabile predefinite$0 numele programului care se executa$_ intrarea implicită sau spatiul de cautare intr‐un sir @ARGV argumentele furnizate scriptului($ARGV[0] refera primul argument, nu numele programului)
%ENV variabilele de mediu
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
tipuri de date
Testarea existentei unei variabile se poate realizacu functia defined()
In mod normal, variabilele vor fi disponibilepe tot cuprinsul programului – domeniul de vizibilitate (scopul) este implicit global
Pentru a face o variabila locala o vom declaracu my sau local
my $scriitor_preferat = "Hermann Hesse";
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
operatori
Aritmetici: + ‐ * / % **$unu = 1;$doi = $unu + $unu;$patru = $doi * 2;$doi = $patru / $doi;$opt = $doi ** 3; # 2 la puterea 3$unu = ($opt - $unu) % 2; # restul
De incrementare/decrementare: ++ ‐‐$unu = 1;$doi = ++$unu; # $doi = 2, $unu = 1$doi = $unu++; # $doi = 1, $unu = 2$scriitori++; # $scriitori = $scriitori + 1
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
operatori
Destinati sirurilor: x .# un rind de 80 de caractere ~@rind = ('~') x 80;# concatenarea a doua siruri$salut = 'Buna' . 'ziua';
De comparare (relationali):Comparare numere: <, >, <=, >=, ==, !=Comparare siruri: lt, gt, le, ge, eq, ne
De definire a unui interval: ..print (1 .. 33); # de la 1 la 33@combinatii = ('aa' .. 'zz');
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
operatori
Logici: and or not$to_be = 1;
$fals = $to_be and not $to_be;$adevarat = (7 > 3) or (3 <= $studenti);
Constructii echivalente: and ≡ &&, or ≡ ||, not ≡ !$fals = $to_be && !$to_be;
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
operatori
De test: ?:
print $nume eq "Hesse" ? "E el!" : "Nu-i el!";
De asignare:
$variabila OP= $valoare; # OP – operator Perl$variabila = $variabila OP $valoare;
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
instructiuni
Expresii evaluate pentru efectele lor colateraleFormeaza partea centrala a oricarui program Perl, prelucrind datele stocate in variabile
O secventa de instructiuni formeaza un bloc, delimitat in general intre acolade {}
Fiecare instructiune trebuie terminata de ;In afara de instructiuni, un program mai poatecuprinde declaratii
Tipuri de instructiuni: de asignare, de test, de control
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
instructiuni specifice
De test – unlessComplementara lui if
unless ($nr_studenti >= 30) {print ("Cam putini studenti!\n");
} else {print ("Multi studenti la curs:)\n");
}
Constructia else poate lipsi
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
instructiuni specifice
Atit if cit si unless pot fi scrise in forma postfixataprint "E chiar el" if $nume eq "Hesse" or
$nume eq "Hermann";
$nr_studenti-- unless $nr_studenti;
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
instructiuni specificeDe control
foreach – utila de obicei pentru iterarea tablourilor@note = (9, 9, 7, 10, 5, 8, 8); foreach $nota ( @note ) { print "$nota\n" unless $nota != 10;
} print "Gata\n";
foreach $curent (sort (keys (%curente))) {print "$curent are $curente{$curent} romane\n";
}Variabila de ciclu este o referință a listei, nu o copiea acesteia (elementele listei se pot altera!)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
instructiuni specifice
De control next
Permite saltul la finalul blocului de instructiuni siinceperea urmatoarei iteratii la un while, do, for,foreach (similar cu continue din C/Java)
for ($grupa = 1 ; $grupa <= 4 ; $grupa++){next if $grupa == 2;print "Grupa: $grupa\n";
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
instructiuni specifice
De control last
Va finaliza ciclul de instructiuni si va continua cu urmatoarea instructiune dupa blocul deinstructiuni al unui while, do, for sau foreach
foreach $grupa (1 .. 4) {if ($grupa == 2) { last }; print "Grupa: $grupa\n";
}print "Gata!\n";
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
subrutine
Grup de instructiuni care poate fi definit deutilizator oriunde in program, cu scopul de a reutiliza codul‐sursaTipuri:
Proceduri – nu returneaza nimicFunctii – returneaza o anumita valoare
Declaratia:sub nume ( parametri ) {
bloc # grup de instructiuni}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
subrutine
Lista de parametri poate lipsi:sub aduna {# lista argum. e disponibila# in variabila @_$primul = shift;$al_doilea = shift;return $primul + $al_doilea;
}
# se apeleaza subrutina (functia) “aduna”print &aduna (2, 7);
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
subrutine
Se pot include variabile private (locale) cu mySe pot furniza parametri nedefiniti cu undefParametrii pasati unei subrutine se regasescin variabilele speciale $_ sau @_
Pentru returnarea valorilor se pot folosivariabilele $_ sau @_
Subrutinele se pot apela recursivO paleta larga de subrutine predefinite
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
subrutine: predefinite – categorii
Manipularea valorilor scalare: chomp, chop, chr, crypt,hex, index, length, ord, reverse, sprintf, substr, tr,...
Expresii regulate: pos, split, study,...Functii numerice: abs, cos, exp, int, log, oct, rand, sin, sqrt, srand,...
Procesarea tablourilor: pop, push, shift, unshift,...Procesarea listelor: grep, join, map, sort, unpack,...Procesarea tablourilor asociative: delete, each, exists, keys, values
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
subrutine: predefinite – categorii
Intrari/iesiri: close, closedir, die, eof, fileno, flock, format, getc, print, printf, read, readdir, seek, tell, truncate, warn, write,...
Fisiere & directoare: chdir, chmod, chown, fnctl, glob, ioctl, link, mkdir, open, opendir, rename, rmdir, stat, unlink,...
Controlul fluxului programului: continue, die, do, eval, exit, goto, last, next, redo, return, sub,...
Controlul vizibilitatii: import, local, my, use,...Procese: alarm, exec, fork, kill, pipe, sleep, wait,...
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
subrutine: predefinite – categorii
Acces la retea (socket‐uri): accept, bind, connect, listen,recv, send, shutdown, socket,...
Informatii despre retea: gethostbyaddr, gethostbyname, gethostent, getnetbyaddr, getnetbyname,...
Manipularea timpului: gmtime, localtime, time,...Alte functii utile: defined, dump, scalar, undef,...
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
subrutine: predefinite
Majoritatea subrutinelor predefinitesunt considerate drept operatori unari
(nu trebuie utilizate obligatoriu parantezele):
print (sin (3.14));print sin 3.14; echivalente
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
fisiere
Fisier: colectie logic contigua de date, stocata pe un mediu (fizic) de memorare
Implicit, se pot utiliza: STDIN – intrarea standard (tastatura)STDOUT – iesirea standard (ecranul)STDERR – iesirea de eroare standard (ecranul)
Citirea datelor se realizeaza cu operatorul <>Scrierea datelor se poate face via functiile obisnuite de afisare (print, printf)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
fisiere: exemplu
print STDOUT "Un nume, va rugam: "; $nume = <STDIN>; print STDOUT "Salut, $nume";
In variabila $nume vor fi stocate caracterele preluate dela intrarea standard, inclusiv newline care marcheazafinalul introducerii sirului de la terminal
Eliminarea caracterului newline: prin chop() sau chomp()
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
fisiere
Inainte de a fi utilizat, un fisier trebuie deschis:open (FIL, "nume_fisier");
Citirea din fisier se va realiza cu operatorul <>Scrierea in fisier se va face cu print/printfLa finalul prelucrarii, fisierul trebuie inchis:close (FIL);
Daca nu se specifica nici o variabila, operatiile deintrare/iesire se vor realiza via variabila $_
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
fisiere: exemplu
# deschidem fisierulopen (FIL, "lupul_de_stepa.txt");# parcurgem intreg fisierul...while (<FIL>) {
print $_; # afisam linia citita# in variabila $_
}# inchidem fisierulclose (FIL);
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
fisiere
Toate functiile uzuale din limbajul C destinatemanipularii fisierelor sunt suportate: seek(), tell(), rename(), chmod(), chown(), lstat(), link(), symlink(), unlink(), ioctl(),…Pentru directoare, se pot utiliza: opendir(), readdir() si closedir()Expandarea continutului unui fisier se realizeazacu <> sau glob()@pagini = <*.html>;@director = glob("/tmp/*");
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
erori & avertismente
Pentru a verifica daca anumite functii sau actiunis‐au soldat cu succes ori au cauzat erori,
se pot folosi die() si warn()
open (FIL, "lupul_de_stepa.xml") ordie ("Fisierul nu poate fi deschis");
Codul de eroare se poate capta via variabila speciala $!
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
erori & avertismente
Exemplu: dorim sa stergem toate fisiereleordinare stocate in directorul /tmp:
foreach (</tmp/*>) { unlink || warn "Eroare la stergerea $_: $!\n";
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
cuprins
Expresii regulate *DefinitieOperatori
Meta‐caractereConstructii predefinite
FunctiiExemplificari
* Multumiri lui Victor Tarhon‐Onu
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate
Expresie regulata (regular expression)şablon (pattern) caruia, pe baza unor reguli precise,
i se poate asocia unui text
Variabila implicita în care se realizează diferite acțiuniimplicând expresii regulate este $_
Specificarea altei variabile se face via operatorul =~
Se poate utiliza si !~ (echivalent cu negatia lui =~)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: operatori
Operatorul m//Se foloseşte pentru a căuta un şablon în cadrul unuitext dat – daca nu e pericol de confuzie, litera “m” poate lipsi
Returnează valoarea logică “adevărat” în cazul în carecăutarea se încheie cu succes, “fals” în restwhile (<STDIN>) {print "Am gasit subsirul \"Victor\" in $_" if m/Victor/;
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: operatori
Operatorul m// (optiuni uzuale)Căutare caseinsensitive(majusculele nu diferă de minuscule) – iwhile (<STDIN>) {
print "Am gasit tag-ul \"<b>\" sau \"<B>\" in $_" if /<b>/i;
}Cautarea tuturor secvențele care se potrivesc şablonului – gmy $sir = "a b r a c a d a b r a", $num_a = 0;while ($sir =~ /a/g) { $num_a++; }print "Am gasit de $num_a ori caracterul \'a\'.\n";
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: operatori
Operatorul s///Permite căutarea şi substituția unui şablon cu un text
while (<STDIN>) { s/autmat/Automat/i;print;
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: operatori
Operatorul qr//Precompilează un şir de caractere ca expresie regulată
Expresia regulată precompilată poate fi stocatăîntr‐o variabilă şi refolosită în construcția altor expresii regulate sau poate fi utilizată directmy $expr = qr/(autmat|automt)/i; while (<STDIN>) {
s/$expr/Automat/; print;
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate
Delimitarea expresiei regulate şi, dacă este cazul, a şirului substituitor se poate realiza cu alte caractere speciale decât "/"
while (<>) { print if m|<pre>|i .. m|</pre>|i;
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Identificarea caracterelorCautarea unui caracter se realizeaza specificindacel caracter
Pentru cautari complexe, se folosescmetacaractere= caractere care nu se identifică pe ele însele într‐o expresie regulata
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Metacaracterul .Identifica orice caracter, exceptând newline "\n"
Metacaracterele [...]Reprezintă o clasă de caractere (enumerare):
/[a-z]/ /[a-z][ATX][0-7]/
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Metacaracterul ^In cadrul unei secvențe de caractere are rol de negare[^25] – toate caracterele exceptind 2, 3, 4, 5
In alte cazuri, desemnează începutul unei linii^[25] – orice sir începind cu o cifră cuprinsă între 2 şi 5
Metacaracterul $Identifica finalul unei linii: /Hesse$/
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Metacaracterul |Alternativa intre doua/mai multe forme posibile:
while (<STDIN>) {print if (/[0-9]|[A-Z][a-z]/);
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Metacaracterele ()Grupeaza atomi şi memoreaza valoarea subşirurilordin text corespunzătoare acestor atomi
Atom = caracter lipsit de semnificatie oriun meta‐caracter de pozitionare (^ sau $)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Metacaracterele ? * + { }Au rolul de multiplicatori ai unui atomUn atom urmat de ? poate identifica de zero saumaxim o singură dată un atom
Simbolul * poate identifica zero, una sau mai multe apariții consecutive ale aceluiaşi atom
Un atom urmat de + poate să identifice măcar o apariție a atomului
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Metacaracterele ? * + { }atom {m, n} va identifica cel puținm atomi, dar nu mai mulți de n
atom {m,} va identificam sau mai mulți atomiatom {,n} va identifica n atomi cel multatom {n} va identifica exact n atomi
{1,} ≡ + {0,} ≡ * {0,1} ≡ ?
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: meta‐caractere
Metacaracterele ? * + { }
while (<STDIN>) { print "Cel putin o aparitie a cuvintului \'web\'
la inceputul liniei\n" if (/^(web)+/);
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: constructii
\d o cifra: [0‐9]\w un caracter alfanumeric: [0‐9_a‐zA‐Z]\s un spatiu alb: [\t\r\n\ \f ]\D orice exceptind cifre: [^0‐9]\W caracter ne‐alfanumeric: [^0‐9_a‐zA‐Z]\S orice exceptind spatii albe: [^\t\n\r\ \f]\b limitele unui cuvint\B orice alt context decât limitele unui cuvânt(interiorul unui cuvânt)
\A începutul unui şir\Z sfârşitul unui şir
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: functii
Functia tr///Translateaza caracter cu caracter un text
tr/A-Z/a-z/ # majusculele devin minusculetr/http:/ftp:/ # http: devine ftp:
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: functii
Functia split()Imparte un şir de caractere în funcție de o expresieregulată şi returnează un tablou conținândsubşirurile care nu satisfac acea expresie regulată
$data_sistem = localtime (time);($ziua, $luna, $num, $timp, $an) = split(/\s+/, $data_sistem);
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: functii
Functia join()Reuneşte mai multe şiruri de caractere în unul singur,delimitate de un scalar
Functia eval()Poate fi folosită la evaluarea/execuția unei expresii Perl
Returneaza valoarea ultimei expresii evaluate
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate
Alte detalii in articolul “Expresii regulate in Perl” de S. Buraga si V. Tarhon‐Onu, NET Report,
vol. 11, 09 (120), sept. 2002: www.infoiasi.ro/~busaco/publications/articles/regexp.pdf
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
expresii regulate: exemplu
Verificarea validitatii unei adrese de e‐mail:
sub valid_email { $testmail = shift; return 0 if ($testmail =~ / /); if ($testmail =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || $testmail !~
/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/) { return 0;
} else { return 1; }
}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
module
Modul: unitate de cod precompilat,incapsuland diferite functionalitati oferite programatorilor
Se stocheaza in fisiere cu extensia .pm, codul putand fiutilizat ulterior, fara “reinventarea rotii”
Modulele se includ in program prin use Modul;
In mod uzual, fiecare modul are propria lui documentatie,disponibila prin man sau perldoc
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
module
Module standard (exemple):CGI – pentru scrierea de scripturi CGI File – pentru prelucrarea facilaa fisierelor/directoarelor
Math – pentru operatiuni matematice(e.g., calcule cu numere complexe)
Socket – pentru programarea in retea (Internet)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
module
Colectia globala de module folositoare: CPAN (Comprehensible Perl Archive Network)www.perl.com/CPAN/Programare de sistemTipuri de date & conversiiConectivitate cu bazele de dateProcesarea caracterelor, textelor, imaginilor etc.Suport pentru Internet & WebPrelucrarea diverselor tipuri de resurse(documente XML, foi de calcul Excel, arhive ZIP,...)
Instrumente de documentare...
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
module
Unele module se pot baza pe altele, constituind ierarhii
Exemple: File::Find – traversarea unui arbore de directoareHTML::Parser – prelucrarea doc. HTMLMath::Complex – lucrul cu numere complexeSearch::Dict – cautarea unei chei dintr‐un dictionarXML::Parser – utilizarea analizorului XMLXML::XSLT – transformari XSL …
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Scop:ofera rutine/metode pentru dezvoltarea comoda
a script‐urilor CGI
modulul CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Generare de cod HTML – maniera procedurala:
#!/usr/bin/perl
use CGI qw/:standard/; # utilizare CGI standard
print header(); # trimitem antetul HTTP# afisam antetul paginii Webprint start_html(-title => "Un salut");print h1('Salut!'),
p('Un paragraf...'); # diferite elemente HTML# afisam finalul de documentprint end_html();
modulul CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Generare de cod HTML – maniera obiectuala:
#!/usr/bin/perl
use CGI; # utilizam modulul CGI
$c = new CGI; # instantiem obiectul CGIprint $c->header(); # trimitem antetul HTTP# afisam antetul paginii Webprint $c->start_html(-title => "Un salut");print $c->h1('Salut!'),
$c->p('Un paragraf...'); # diferite tag-uri HTML# afisam finalul de documentprint $c->end_html();
modulul CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Preluarea parametrilor transmisi script‐ului:Se foloseste param()
@parametri = $c->param(); # lista parametrilor disponibiliprint “@parametri”;$nume = $c->param('nume'); if ($nume != 'Admin') {print '<p>Nume incorect...</p>';
}
modulul CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Redirectarea clientului:# redirectare in functie de limbaif ($limba eq 'ro')
print $c->redirect('/index.ro');else
print $c->redirect('/index.en');
Trimiterea antetului HTTP:# trimite Content-type: image/pngprint $c->header('image/png');
modulul CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Alte metode: query_string() – sirul de interogare pt. GETremote_addr() – adresa IP a masinii‐clientremote_host() – adresa simbolica/domeniul clientuluirequest_method() – cererea HTTP realizatauser_agent() – informatii privitoare la browsercookie() – acces la cookie‐uri
modulul CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Alte functii utile: escape() – genereaza un sir codificat in stilul URI (caracterele speciale sunt substituite de %NN)
unescape() – decodifica un sir codificatcu functia escape()
escapeHTML() – genereaza un sir codificat in stilulHTML (caracterele speciale sunt inlocuitecu entitatile < > & in loc de < > &)
unescapeHTML() – decodifica un sir codificatcu escapeHTML()
modulul CGI
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Afişarea unei imagini aleasa aleatoriu:
#!/usr/bin/perl# reda continutul unui fisier graficuse CGI qw/:standard/;# constante folosite pentru specificarea# directoarelor care contin imagini$DIR_RADACINA = '.';$DIR_IMAGINI = 'img';chdir "$DIR_RADACINA/$DIR_IMAGINI" or die "direct. de imagini e inaccesibil.";
# preluam fisierele JPEG, GIF si PNG@imagini = <*.{jpg,gif,png}>;
modulul CGI: exemplu
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Afişarea unei imagini aleasa aleatoriu – continuare:
# alegem imaginea$imagine = $imagini [rand (@imagini)];die "eroare la selectarea imaginii"
unless $imagine;# redirectam navigatorul
print redirect ("$DIR_IMAGINI/$imagine");
modulul CGI: exemplu
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Pentru procesarea continutului HTML: modululHTML::Parser
Pentru preluarea continutului resurselor Web: modulul LWP (Library for Web access in Perl)
Pentru redirectarea mesajelor de eroare spre un fisierde jurnalizare ori spre browser: modulul CGI::Carp
use CGI::Carp qw(fatalsToBrowser);die "O eroare intentionata...";
alte module utile
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
modulul DBI
Asigura independența de arhitectura internă şimodul de comunicare cu sistemele de gestiune a bazelor de date relaționale
Componente:interfața de programare DBI (ofera suport la nivel înalt pentru diferite operații cu baze de date)
driver‐e (asigură modalitatea efectivă de conexiune la un server de baze de date particular)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
modulul DBI
Arhitectura:
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
modulul DBI
Interactiunea cu un server de baze de date se realizeaza via descriptori (handlers):Driver handler – reprezinta driver‐ul asociatunui sistem de baze de date relationale(MySQL, PostgreSQL, Oracle etc.)
Database handler – specifica o conexiune unicala o baza de date particulara stocate de un server
Query handler – reprezinta o interogare (comanda) SQL ce va fi executata asupra unei baze de date
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
modulul DBI
Operatii cu baze de date (MySQL):Conectarea: connect ($masina, $baza, $utiliz, $parola)
use Mysql; $dbh = Mysql->connect (‘localhost’, ‘studenti’,
‘tux’, ‘P@roLa’);$mesaj_eroare = Mysql->errmsg();
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
modulul DBI
Operatii cu baze de date (MySQL):Interogarea: query ($sql)
$qh = $dbh->query (‘select * from stud’);# numarul de inregistrari obtinute$inreg = $qh->numrows ();
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
modulul DBI
Operatii cu baze de date (MySQL):Accesul la inregistrarile obtinute: fetchrow_array ()fetchrow ()fetchhash ()
while (@inreg = $qh->fetchrow_array()) { print ("Studentul: " . $inreg{‘nume’} .
" are nota " . $inreg{‘nota’} . "\n");}
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
modulul DBI: alte metode
listtables() – furnizeaza tabelele unei baze de datelistfields() – furnizeaza numele campurilor dintr‐o tabelaprepare() – pregateste o comanda SQL spre a fi executataexecute() – executa o comanda SQLfinish() – finalizeaza o comanda SQLdisconnect () – intrerupe conexiunea
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
instrumente
Apache2Triad – mediu pre‐configurat de dezvoltareWeb (Apache, Perl, MySQL,…)
ActivePerl – distributia Perl consacratapentru sistemele Windows
Mason – modul Perl folosit pentru dezvoltareade aplicatii Web
mod_perl – modul Apache ce include suportulPerl (CGI) direct in serverul Web
Apache::ASP – suporta “scufundarea” constructiilor Perl in paginile Web (ca la PHP)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
R. Schwartz, T. Christiansen, Learning Perl (2nd Edition), O’Reilly, 1997
L. Wall et al., Programming Perl (3rd Edition),O’Reilly, 2000
S. Buraga, V. Tarhon‐Onu, Ş. Tanasă, ProgramareWeb în bash şi Perl, Polirom, 2002
S. Buraga, Tehnologii XML, Polirom, 2006
L. Alboaie, S. Buraga, Servicii Web, Polirom, 2006
resurse
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Situl Perl oficial: www.perl.com/Situl Perl al dezvoltatorilor: www.perl.org/
Perl Monks: www.perlmonks.com/Perl Month: www.perlmonth.com/The Perl Journal: www.tpj.com/
resurse
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Limbajul PerlCaracterizareSubrutine
Procesarea fisierelorExpresii regulateModule Perl
Conceperea de scripturi CGISuportul pentru bazele de date
Resurse
rezumat
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
??
top related