2013-07-15 29 views
7

Belirti: $c="foo"; bir hata atar ve $b="foo"; yapmaz.Perl, değişken davranış, ad tabanlı tutarsızlık

Scriptim tam anlamıyla 3 satırdır. Aşağıdaki hiçbir hata veya uyarılar
use strict;
$b = "foo";
print $b;
üretir ancak aşağıdaki değişiklik olursa, bir hata "açık paket adı gerektiriyor" olsun.
use strict;
$c = "foo";
print $c; ,

Ben use strict; kullanımdan önce ilan edilecek değişkenleri gerektirdiğini anlamak ve my $c = "foo"; için $c = "foo"; değişen gerçekten hatayı önlemek, ancak bu tek başına tutarsızlığı açıklamaz.

Burada biraz ışık tutabilir mi? Eminim bariz bir şey eksik. Windows 7 x64'de Strawberry Perl v5.16.3 çalıştırıyorum. Ben strict belgelerine c:\strawberry> perl test.pl

+6

: Bu nedenle, $a ve $b değişkenleri iki maddeden değerlerine sahip bir sort blokta, ekstra bildirimleri olmadan kullanılabilir kodunuzda '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – DVK

+0

Bu iyi bir alışkanlık gibi geliyor, teşekkürler DVK. –

cevap

8

Bazı küresel değişkenler. Çünkü `$ a sort`, kullanmak asla` kendi özel anlam

use strict; 
my @nums = (1, 5, 3, 10, 7); 
my @sorted = sort { $a <=> $b } @nums 
+0

Teşekkürler, açıklamalarınızı ve örneklerinizi takdir ediyorum. Bu şimdi bana mantıklı geliyor. –

17

aracılığıyla, NPP düzenleme ve komut satırından benim komut dosyalarını yürütme ediyorum:

Çünkü sıralama() tarafından kendi özel kullanım

, değişkenler ve $ b'nin her, $ Bu denetimden muaf tutulmuştur. $_, $a, $b etkin bir predeclared gibi

+0

Referans için teşekkür ederiz! Çok yararlı. –