有什麼區別(如果有的話)我的包「測試::測試」的這兩種封裝版本的用戶:包變量聲明問題
Test::Test;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(hello);
use strict; use warnings;
our $c = 3;
sub hello {
print "$_\n" for 0 .. $c;
}
。
Test::Test;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(hello);
$c = 3;
sub hello {
print "$_\n" for 0 .. $c;
}
這並不準確。 '$ c'是包含或不包含'our'的全局包('$ Test :: Test :: c'),任何包或不包含的包都可以通過該名稱訪問它。然而,啓用'strict'vars''後,即使在'Test :: Test'中也不能調用它'$ c',除非使用'use vars'來創建一個異常,或者使用'our'創建一個詞法別名。 「我的」和「本地」當然做了完全不同的事情。 – hobbs 2010-11-10 07:48:33
另請參閱http://stackoverflow.com/questions/3626190/why-are-variables-declared-with-our-visible-across-files/3626333#3626333以進一步解釋「我們」做了什麼,它有什麼不同來自'use vars',以及它爲什麼不僅僅意味着「在這個包中可見」。 – hobbs 2010-11-10 07:49:55
對,它是「嚴格使用」和「我們」的重要組合。嚴格使用程序員聲明變量並考慮範圍。 – 2010-11-10 08:10:40