有什么区别(如果有的话)我的包“测试::测试”的这两种封装版本的用户:包变量声明问题
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