use strict; use warnings; # Modulul strict impune o serie de restricții care să ajute la realizarea unui program # care să fie mai puțin predispus la erori. În aceast context variabilele se declară obligatoriu # folosind cuvântul cheie "my". Acesta restricționează domeniul de aplicare al variabilei la blocul # în care a fost declarată. Astfel se localizează toate variabilele. # Acest mecanism face codul mai lizibil și mai puțin predispus la erori. # Dacă o variabilă nu este declarată folosind "my", aceasta este creată și tratată drept global. # Acest lucru este bine de evitat. Se recomandă întotdeauna reducerea sferei de "vizibilitate" # a variabilelor la porțiunea de cod în care acestea sunt necesare. # Modulul warnings, introdus de la versiunea 5.6 ajută la identificarea greșelilor de tastare, # introduce un avertisment ori de câte ori vede ceva în neregulă în instrucțiunile programului. # Acest modul este de un real ajutor în identificarea rapidă a unor inadvertențe scăpate în codul programului. # Notă: Cel mai important aspect care trebuie evidențiat aici ar fi faptul că "use strict" # anulează execuția programului dacă găsește erori. Prin contrast "use warnings" nu oferă # decât avertismente, acestea nu vor anula execuția programului. # În EXEMPLUL 1 s-au introdus în blocul principal două variabile. # Prezența lui 'my' precizează că aceste variabile aparțin blocului principal al programului. # Din acest punct de vedere ele sunt vizibile atât în programul principal cât # și în oricare sub-program/bloc (subrutină) care le poate accesa și altera valoarea. # Pentru a putea demonstra ușor acest aspect, în sub procedură variabila '$var_globala' a fost # apelată în cadrul subrutinei. În același timp variabila 'Şvar_locala' este prezentă atât în blocul principal # cât și în subrutină, cu același nume! ATENŢIE! Cum își dă seama programul că este vorba de două # variabile diferite? Modulul strict obligă declararea tuturor variabilelor în mod local (private). # 'my' precizează acest aspect. Variabila my $var_locala este inițializată cu 4 în blocul principal, # iar variabilei my $var_locala din subrutină i se adaugă valoarea 6. Faptul că ambele au my la inițializare # indică faptul că este vorba de variabile diferite. Aceasta din urmă fiind declarate în subrutină, # ele nu sunt vizibile în programul principal. Pe de altă parte $var_globala NU! este inițializată cu my, # deci! este vorba de aceeași variabilă inițializată în blocul principal. Conform restricțiilor impuse # de modulul strict, declararea unei variabile se face prin utilizarea lui my. De fiecare dată când numele # unei variabile este precedat de my atunci aceasta trebuie să fie o variabilă nouă. # În același bloc de program nu se pot declara două variabile identice cu my, însă acest lucru este # posibil în blocuri diferite, așa cum este arătat în acest exemplu. Cele două variabile $var_locala # sunt declarate în două blocuri diferite ale programului, ele au nume identice, # dar reprezintă locații diferite de memorie, de aceea conținutul lor nu este același. # Exemplele indicate trebuie activate pe rând și rulate separat. #=pod # EXEMPLUL 1. my $var_globala = 2; my $var_locala = 4; sub procedura { my $var_locala = ''; $var_locala += 6; $var_globala += 10; } print '$var_globala'," are valoarea $var_globala\n"; print '$var_locala'," are valoarea $var_locala\n"; print "\nSe executa procedura care modifica valoarea variabilelor\n"; print "Dupa aceasta, variabilele au urmatoarele valori:\n\n"; procedura; print '$var_globala'," are valoarea $var_globala\n"; print '$var_locala'," are valoarea $var_locala\n"; #=cut # EXEMPLUL 2 este identic cu cel anterior cu excepția faptului că în subrutină # a fost introdus my în fața $var_globala. Astfel aceasta devine o variabilă locală nouă în subrutină # și este diferită față de cea declarată în blocul principal. Din această cauză, rezultatele pe # care le produc cele două programe sunt diferite. =pod # EXEMPLUL 2. my $var_globala = 2; my $var_locala = 4; sub procedura { my $var_globala = ''; my $var_locala = ''; $var_locala += 6; $var_globala += 10; } print '$var_globala'," are valoarea $var_globala\n"; print '$var_locala'," are valoarea $var_locala\n"; print "\nSe executa procedura care modifica valoarea variabilelor\n"; print "Dupa aceasta, variabilele au urmatoarele valori:\n\n"; procedura; print '$var_globala'," are valoarea $var_globala\n"; print '$var_locala'," are valoarea $var_locala\n"; =cut