2011-07-15 133 views
1

mysql.pm報價:爲什麼mysql.pm中的全局變量沒有被聲明爲我們的?

3 package DBD::mysql; 
    4 use strict; 
    。。。。 
    17 $err = 0;>--# holds error code for DBI::err 
    18 $errstr = "";>--# holds error string for DBI::errstr 
    19 $drh = undef;>--# holds driver handle once initialised 

什麼奇怪的是,我的所有PROGRAME是use warnings;,並使用此模塊不給出任何警告。

爲什麼?

+1

'使用警告;'是詞彙。代碼仍然不會產生警告,但是這對於-w – ysth

回答

8

在源的第5行:

use vars qw(@ISA $VERSION $err $errstr $drh); 

參見use vars文檔。

這是我們在Perl中引入our之前能夠使全局變量和嚴格共存的一種方式。雖然它現在被認爲是「過時的」(根據文檔),但它仍然存在於真實的代碼中。我想在某些情況下,它適合於類別,「如果它沒有損壞,不要修復它。」你發現了其中的一種情況。

+0

'use vars'和'our'具有微妙不同的行爲,並且在沒有爲此計劃的情況下盲目地將'vars'改爲'我們'的好處可能導致隱藏的錯誤。 –

+0

我的帖子中沒有看到任何意圖給人留下一個印象,那就是應該盲目地將'使用變量'改爲'我們',但對於那些還沒有閱讀使用變量的文檔,我們的Ven 'Tatsu的觀點是有效的。這可能是DBI沒有改變的原因。它沒有被破壞,不會修復它......因爲它們的行爲不一樣,我們也不想破壞其他任何東西。 – DavidO

6

這些變量預先聲明與vars編譯五號線:

use vars qw(@ISA $VERSION $err $errstr $drh); 

這就是爲什麼Perl不會盡管use strict生效而抱怨。

相關問題