Code:
Dupa cum spuneam,ma orientez spre sectiunea noobs,si sper ca incepatorilor sa le foloseasca urmatorul tutorial.
Perl sau Practical Extraction and Report Language este un limbaj de scripting
inventat de catre Larry Wall pentru a gestiona fisiere text foarte mari. Spre
deosebire de C++ si Java este un limbaj "interpretat" si nu complilat. Acest tutorial
are ca scop familiarizarea cu bazele limbajului Perl :).
Inainte de a incepe orice miscare in Perl aveti nevoie de un program care
sa interpreteze scripturile si sa le execute. Daca detineti un sistem unix(linux,mac
os,solaris,bsd) aproape sigur caaveti deja interpretorul perl instalat. Acesta poate fi
accesat deschizand consola de comanda si executand comanda perl. Daca primiti
o eroare de genul "command not found" inseamna ca nu aveti perl instalat.
Daca folositi windows,sau nu aveti perl instalat puteti downloada
programul de la http://perl.org.
Dupa cum v-ati obisnuit de la majoritatea limbajelorde programare,primul
nostru program va fi unul simplu,care afiseaza pe ecran "Hello World!".
Deschideti editorul de text (pico,vim,notepad,wordpad etc) si introduceti
urmatoarele linii de cod.
#!/usr/bin/perl
print "Hello, world!n";
Salvati fisierul ca hello.pl (sau orice alt nume cu extensia .pl) apoi deschideti
consola. Schimbati directorul pana in locul unde ati salvat scriptul si scrieti comanda
"perl hello.pl". Daca ati facut toti pasii cum trebuie ar trebui sa afiseze Hello World!.
Acum sa studiem sursa. Prima linie "#!/usr/bin/perl" ii transmite
programului calea spre locul unde este instalat perl pe computerul vostru. Daca
folosit windows,nu prea aveti nevoie de aceasta linie,dar daca folositi linux inlocuiti
/usr/bin/perl cu locul unde este instalat perl.
Linia urmatoare,adica 'print "Hello World!n" ; ' ii transmite programului sa
afiseze textul Hello World! urmat de o linie noua. Dupa cum probabil ati
observat,fiecare linie in perl trebuie sa fie urmata de " ; " similar cu multe alte
limbajede programare.
Strings - Stringurile reprezinta un sir de caractere care de obicei
formeaza ceva ce are sens. Cuvantul perl de exemplu este un string. La fel si orice
alt cuvant sau propozitie,sir de numere etc. In perl,stringurile sunt afisate folosind
functia perl.
De exemplu,linia 'print "hello world!n" ;" a afisat stringul hello world urmat de o linie
noua. Caracterul "n" sau newline este numit "escape sequence" (pentru a face
acest tutorial cat de cat inteligibil,nu am tradus chiar toti termenii). Limbajul perl
detine multe escape sequences printre care si "t" care printeaza un tab,adica se
considera ca ai apasat tab si se muta textul mai la dreapta. De asemeanea "a" este
un beep. Daca aveti sunetele enabled din windows ar trebui sa auziti beepul.
Acum,sa zicem ca vreti sa afisati un sir mai lung de caractere "" si "n" fara sa
adaugati o linie noua in text. . Pt a face asta aven doua posibilitati. Ori inlocuim
ghilimelele " cu apostrof ' si ceea ce rezulta este " print 'Hello World!n' ;".
Apostroful transmite intrerpetorului ca tot ceea ce urmeaza este text care trebuie
doar afisat si nu interpretat. A 2-a varianta este inlocuirea caracterului "" cu "\".
Aceasta comanda transmite interpretorului sa afiseze caracterul "" lasand litera "n"
neafectata. Ambele metode au acelasi rezultat.
Acum sa va prezint alte metode de formatare a textului. Comanda
'print "Hello" . "World!" . "n" ; ' are acelasi rezultat ca si comanda initiala din
programul hello world. Aceasta este datorita faptului ca . -punctul- este folosit pt
concatenarea textului,adica pt a uni mai multe siruri de caractere intr-unul singur.
Acelasi efect il obtinem daca in loc de . -punct- folosim , -virgula-.
!Numere si expresii matematice!
Expresiile matematice de orice fel pot fi evaluate de programul perl. Operatorii
folositi sunt urmatorii.
+ - adunare
- - scadere
* - inmultire
/ - impartire
% - calcului restului (operatorul mod)
Spre exemplu,priviti urmatoarele operatii.
print 20+3; #afiseaza 23
print 20-3; #afiseaza 17
print 20*3; #afiseaza 60
print 20/3; #afiseaza 6.66666666666667
print 20%3; #afiseaza 2
Pana acum totul ar trebui sa fie destul de clar. Singura nelamurire este probabil
semnificatia caracterului "#". In perl # anunta un comentariu. Interpretorul considera
ca tot ce urmeaza dupa # este un comentariu si nu este afisat sau executat.
De asemenea,nu trebuie uitata ordinea operatiilor matematice,ce a fost
predata in cls a 4-a.si anume ca inmultirea si impartirea se executa inaintea adunarii
si scadereii. Operatia 2+2*3 va avea ca rezultat 8 si nu 12. Daca doriti ca adunarea
sa fie efectuata inaintea inmultirii folositi paranteze adica (2+2)*3.
-Variabile.
Of,in sfarsit am ajuns la variabile. Ca sa mai scurtez din tutorial o sa presupun ca
stiti cu totii ce e aia o variabila,si nu o sa stau sa va explic :). Principalele tipuri de
variabile in perl sunt
- Scalar variable notata cu $numevariabila
- Array variable notata cu @numevariabila
- Hash variable notata cu %numevariabila
O variabila scalara TREBUIE sa inceapa cu caracterul $(dolar) urmat de
o litera sau underline. Exemplu de variabila corect scrisa : $variabilaluSion
Exepmplu de variabila incorect scrisa : variabila lu sion, $123variabila etc.
Variabilelor le sunt asignate valori folosind operatorul = (egal) si pot fi
printate folosind comanda print.
Iata cum arata programul Hello World folosind o variabila.
#!/usr/bin/perl
#hello.pl -cu variabila
$hello_var = "Hello, world!n";
print $hello_var;
- Variabile de tipul array.
Cei care au experienta minima intr-un limbaj de programare cunosc termenul de
vector. Cei care nu au sa isi imagineze un array ca in urmatoarea figura. |__|__|__|
Fiecare casuta are o anumita valoare in interior,iar accest array sau vector contine
toate acele variabile.
Variabilele array sunt initializate in felul urmator :
@fructe = ("mere", "pere", "petarde");
@numere = (23, 54, 35, 5432)
@chestii_diverse = ("cuvant", 300, "tutorial perl plictisitor")
Dupa cum vedeti un array poate contine orice fel de scalar in interior.
Operatiuni cu array- In perl ca si in alte limbajede programare numarul
casutelor,sau variabilelor retinute de catre un array incep cu indicele 0. Adica daca
dam comanda ' print $fructe[0] ' se va afisa "mere".
Daca dam comanda "$fructe[0] = "banane"; merele vor fi schimbate cu banane :)).
Dar,de ce oare folosim $ in loc de @ la aceste operatiuni? Pai,deoarece aceste
operatiuni se adreseaza numai unei portiuni din array si nu tuturor variabilelor ce sunt
cuprinse acolo.
Daca vrem sa actionam in diverse feluri asupra unei portiuni din array
folosim ceea ce se numeste "array slice" adica felie de array.
print @fructe[1,2,3]; afiseaza mere pere petarde
print @fructe[3,2,1]; afiseaza petarde pere mere.
print @fructe[1..3]; afiseaza mere pere petarde.
In acest context folosim iar operatorul @ deoarece actionam asupra mai
multor variabile din array si nu asupra unui singur lucru.
De asemenea este posibil sa numaram invers intr-un array,fara sa stim
cate elemente are.
print @fructe[-1]; afiseaza petarde :).
Ca sa determinam lungimea unui array folosim sintaxa speciala
$#array(unde inlocuim array cu numele propriuzis). Adica priviti urmatorul exemplu:
$last = $#fructe #variabila last a retinut indexului ultimului element al arrayului
print @fructe[($last/2)..$last] # si se afiseaza a 2-a jumatate a arrayului.
Daca vom afisa variabila $last vom observa ca are valoarea 2 si nu 3-care elem are
arrayul. Asta se intampla deoarece indexarea incepe de la 0 si nu de la 1. Pt a afla
numarul real de obiecte din array trebuie doar sa adunam 1 :).
Totusi,exista si o cale mai simpla de a numara exact cate obiecte are un
array. Asta se face examinand arrayul dpdv al unei variabile scalare.
Adica $numarul_d_elem = @fructe si vom avea numarul de elemente fara sa mai
trebuiasca sa adunam sau sa scadem nu stiu ce.
Stiu ca multi dintre voi "h4x0r-ilor" sunteti foarte lenesi,si stiu ca e destul
de plictisitor sa tot stai sa scrii la un array toate elementele cu ghilimele virgule si
alte prostii. De accea va prezint comanda qw//. Operatorul qw// vine de la quote
words si ia cuvinte separate de spatiu si le transforma intr-o lista fara sa mai stati voi
cu grija punctuatiei. Spre exemplu initializam un array in felul urmator :
@an = qw/ ianuarie februarie martie aprilie mai iunie iulie august septembrie
octombrie noiembrei decembrie/ ; Dupa cum vedeti este foarte clar si dificil de
gresit la o asemenea sintaxa.
-Afisarea valorilor unui array (nenicule da mult mai dureaza tutorialul asta
:( )
Consideram urmatorul program care vorbeste de la sine.
my @fructe = qw/mere portocale banane caise struguri/;
print @fructe; # afiseaza "mereportocalebananecaisestruguri"
print join(", ", @fructe);# afiseaza "mere, portocale, banane, caise, struguri"
print "@fructe"; # afiseaza "mere portocale banane caise struguri"
Mai ramane ultimul tip de variabila,variabila hash sau matrice,dar e mult
de scris la ea,multe operatiuni si o sa revin cu un tutorial facut special pt hash.
-Operatori decizional- Adica if,and,or fratilor :)
Operatorul decizional if. Fara sa mai adaug multa palavrageala iata cum
functioneaza if in perl.
if( test boolean) {aici intra comenzi ce se executa daca testul boolean este
adevarat}
Spre exemplu studiati urmatorul program.
if (5 > 3) {
print "Mdap,5 e mai mare decat 3 nenen";}
Daca tot am ajuns la if,trebuie sa va familiarizez cu operatorii (nu mai stiu
cum le zice) ma rog,va dati voi seama care cum sunt :
== - egal cu (valoare numerica) adica intre 2 numere cand le testezi egalitatea bagi
==
eq - egal cu (la stringuri)
> - mai mare
< - mai mic
>= - mai mare sau egal
<= - mai mic sau egal
!= - diferit de (sau nu e egal cu)
|| - operatorul logic sau
&& - operatorul logic si
Structura conditionala if...blabla...else.
Din nou,un program care vorbeste de la sine :
if (3 > 5) {
print "Da frate,3 e mai mare decat 5.n";
}
else {
print "Fraiere,3 nu e mai mare decat 5.n";
}
Structura repetitiva
Structura repetitiva while functioneaza in felul urmator:
while (test boolean adevarat) {executa comenzile de aici}
Priviti urmatorul exemplu:
$i = 0;
while ($i <= 10) {
print "$i inca e mai mic decat 10n";
$i = $i + 1;
}
Daca tot am batut atata drum pana aici,hai sa va arat si cum scurtam
textul,facem codul mai curat,si ne pastram lenea pt un joc de cs :).
$a += 1; # e la fel cu $a = $a + 1
$a -= 3; # e la fel cu $a = $a - 3
$a *= 42; # e la fel cu $a = $a * 42
$a /= 2; # e la fel cu $a = $a / 2
$a %= 5; # e la fel cu $a = $a % 5;
$a **= 2; # e la fel cu $a = $a ** 2;
De asemenea perl detine si operatori de incrementare ++ si
decrementare --. Adica $variabila++ # aduna 1 la variabila
$variabila-- #scade 1 din variabila.
Structura repetitiva for.
For-ul din perl e identic cu cel din c++. Studiati programul urmator si va veti da
seama ce si cum.
for ($i = 0; $i <= 10; $i++) {
print "$i nu e mai mare decat 10n";
}
In sfarsit am ajuns la sfarsitul tutorialului. Sper ca o sa il citeasca macar unul din
voi... Voi reveni cu tutoriale mai detaliate pt hashuri si alte sectiuni. |