2012-02-16 17 views
9

Aşağıdaki gibi bir komut dosyasında, "my" öğesinin "var" değerini yalnızca bir kez etkin bir şekilde bildirmesi ve BEGIN bloğu dışında görünmesini sağlamanız mümkün mü?BEGIN bloğundaki değişken bildirim

echo -e "\n\n\n" | \ 
    perl -lne 'BEGIN { my $var="declared & initialized once" } print $var' 

Ayrıca, "my" olmadan varyasyon bildirme neden BEGIN bloğu dışında görünmesini sağlar?

cevap

12

Place my $var; önce BEGIN blok:

$ perl -le 'my $var; BEGIN { $var = "declared"; } print $var;' 
declared 

my yüzden $varBEGIN bloğunun dışında örnek tanımlı değil, değişken sözcük kapsam verir. my'un kaldırılması, onu ödev sonrasında komut dosyasında erişilebilir olan genel bir değişken yapar.

+0

Derleme sırası beni biraz şaşırtıyor. BEGIN bloğunda önce $ var bildirildiğinden, neden daha sonra "benim" ibaresiyle silinmiyor? –

2

Ayrıca, "my" olmadan varyasyon bildirme neden BEGIN bloğu dışında görünmesini sağlar?

Bunu bildirmiyorsunuz. use strict kullanmıyorsanız (varsayılan olarak bildirimi engeller), global olarak otomatik olarak kaydedilir. Bir linerda, strict, yardımcı olduğundan daha fazla acıyor; Böyle bir ortamda bir beyanda bulunmamakla gayet iyiyim.

İlgili konular