我有下面的Perl代碼。我使用-w並嚴格使用。爲什麼@LDRATA :: SUITES不會產生錯誤? $ x呢?perl爲什麼這不會在嚴格使用時產生錯誤?
#!/grid/common/bin/perl -w
use strict;
for (@LDRATA::SUITES) { print("one\n"); }
for ($LDRATA::SUITES[0]) { print("two\n"); }
for($x) { print("three\n"); }
我有下面的Perl代碼。我使用-w並嚴格使用。爲什麼@LDRATA :: SUITES不會產生錯誤? $ x呢?perl爲什麼這不會在嚴格使用時產生錯誤?
#!/grid/common/bin/perl -w
use strict;
for (@LDRATA::SUITES) { print("one\n"); }
for ($LDRATA::SUITES[0]) { print("two\n"); }
for($x) { print("three\n"); }
正如其他人所說,如果變量未聲明爲或完全合格,則使用嚴格變量將引發錯誤。這裏完全合格。
如果你在一個地方給出不正確的包的名字,你會得到一個警告(雖然不是從嚴格):
$ perl -w
use strict;
for (@LDRATA::SUITES) { print("one\n"); }
__END__
Name "LDRATA::SUITES" used only once: possible typo at - line 3.
如果你給它一個以上的地方,Perl不具有任何方式來說明這不是故意的,所以沒有錯誤或警告是可能的。
根據的perldoc,use strict vars
會如果變量不聲明或完全限定拋出一個錯誤。
@LDRATA::SUITES
是一個完全合格的變量的例子。
您閱讀錯誤'$ x'觸發器,對不對? '全局符號'$ x「需要顯式包名...'?似乎很自我解釋。 – cHao 2013-03-19 15:19:55
如果您鍵入'$ main :: x',它不會抱怨。這是'$ x'的顯式包名稱。 – TLP 2013-03-19 15:43:05
我期望$ x上的錯誤。這只是一個顯示錯誤的測試程序。我想知道爲什麼LDRATA不會產生錯誤。我從你輸入的內容中瞭解到,如果我提供一個包名,即使是假的,我也不會得到一個錯誤。 – kdubs 2013-03-19 15:45:53