Perl'de değişkenlerin leksik veya dinamik kapsamı olabilir.
my, leksik kapsam ile bir değişken oluşturur: Değişken yalnızca tanımlandığı blok içinde görünür.local, dinamik kapsam ile bir global (paket) değişkenin değerini geçici olarak yeniden tanımlar: Yeni değer, bloktan çıkana kadar çağrılan tüm fonksiyonlarda görünür.our, global (paket) bir değişken tanımlar, ancak yalnızca mevcut leksik blok içinde görünür.Örnek:
our $x = 10; sub test_my { my $x = 20; inner(); } sub test_loc { local $x = 30; inner(); } sub inner { print $x; } test_my(); # 10 yazdırır — my $x inner içinde görünmez $| = 1; test_loc(); # 30 yazdırır — local $x inner'da görünür
local, $_, $/, $@ gibi özel paket değişkenlerini değiştirmek için kullanılır.
Aşağıdaki kodun çıktısı ne olacak ve neden?
our $a = 5; sub outer { my $a = 10; inner(); } sub inner { print $a; } outer();
Cevap: 5 yazdırır. Çünkü outer'daki my değişkeni $a inner'dan görünmez; kullanılan, our ile tanımlanmış paket değişkeni $a'dır.
Hikaye
Hikaye
Hikaye
JavaScript geliştirmesinden Perl'e geçtikten sonra, geliştiriciler gereksiz yere her yerde our ile değişken tanımlamaya alıştılar ve bu, kapsüllemeye zarar veren ve isim çakışmalarına yol açan beklenmedik global değişkenlerin ortaya çıkmasına neden oldu.