ProgramlamaKıdemli Perl Geliştirici

Perl'de değişkenlerin görünürlük alanı ile ilgili özelliklerden bahsedin. my ve local operatörlerinin hangi nüansları vardır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Perl'de değişkenlerin görünürlük alanı, my ve local anahtar kelimeleriyle belirlenir.

  • my, leksikal görünürlük alanına sahip bir değişken oluşturur (yalnızca mevcut blokta geçerlidir).
  • local, bir global değişkenin mevcut değerini geçici olarak saklar ve blok var olduğu sürece yeni bir değer atar - genellikle yalnızca global değişkenlerle kullanılır (örneğin, $_, $/ vb.).

Örnek:

my $x = 42; # yalnızca mevcut blokta görünür. { local $/ = undef; my $input = <STDIN>; # $/ burada undef, blok sonrası değeri geri alır. }

my kullanmak, daha öngörülebilir bir görünürlük alanı sunduğu için tercih edilir.

Zor bir soru

Aynı değişken ile my ve local kullanıldığında, farklı bloklarda ne olur?

Çoğu zaman local ve my'nin aynı şekilde çalıştığını söylerler, ama bu doğru değil. local yalnızca global değişkenlerle çalışır (paket değişkenleri). my ile tanımlanan bir değişken, local için görünmez.

Örnek:

our $foo = "global"; { local $foo = "local"; print $foo; # "local" } print $foo; # "global" { my $foo = "lexical"; } # $foo blok dışında - global versiyon, "lexical" değil.

Konuyu bilmemekten kaynaklanan gerçek hata örnekleri


Hikaye

Bir script'te, my ile tanımlanan bir değişkenin geçici olarak değiştirilmesi için local kullanıldı, bu da hiçbir sonuca yol açmadı ve içsel modüllerden birinde olay işleme hatalarına neden oldu.


Hikaye

Bir projede, foreach içinde $'yi local ile "lokalize" etmeye çalıştılar, ancak foreach'un zaten yeni bir $ belirttiğini unuttular. Sonuç - çalışmayan filtre ve yanlış döngü mantığı.


Hikaye

Paketin global değişkeni our ile tanımlanmamıştı ve local $var ile lokalleştirme girişimi, strict ve warning nedeniyle script'in çökmesine neden oldu, ve hata ayıklama bir gün sürdü.