use strict; use warnings; # my → Creează o variabilă nouă, lexicală (scop static). # Variabila există doar în blocul în care este declarată. # Variabila este invizibilă în subrutinele apelate. # Aceasta este adevărata variabilă locală, în sensul limbajelor moderne. # local → Salvează și restaurează valoarea unei variabile globale (scop dinamic). # Nu creează o variabilă nouă. # Modifică temporar o variabilă globală (package variable). # Subrutinele apelate văd modificarea. # La ieșirea din bloc, valoarea originală este restaurată automat. # Exemplele indicate trebuie activate pe rând și rulate separat. #=pod my $x = 10; sub test { print "În subrutină: $x\n"; # vede $x = 10 } { my $x = 99; # variabilă NOUĂ, doar în acest bloc test(); # subrutina NU vede $x = 99 } test(); # vede tot $x = 10 # Explicație: # my $x = 99 creează o variabilă complet nouă, # care ascunde variabila externă doar în blocul curent. Subrutina nu o vede. #=cut =pod our $x = 10; sub test { print "În subrutină: $x\n"; # vede valoarea curentă a lui $x } { local $x = 99; # modifică TEMPORAR variabila globală test(); # subrutina vede $x = 99 } test(); # vede $x = 10 # Explicație: # local nu creează o variabilă nouă, doar schimbă temporar valoarea variabilei globale $x. # Subrutina vede modificarea. =cut # ÎN CONCLUZIE # 'my' creează o variabilă nouă # 'local' împrumută temporar o variabilă globală # 'local' se folosește în două situații: # 1. Variabile speciale Perl: $_, $/, $|, $!, %ENV, @ARGV, $SIG{...} # 2. Variabile globale dintr-un pachet (situații destul de rare)