Каковы различия (если таковые имеются) для меня, как пользователь пакета «Test :: Test» между этими двумя пакет-версии:пакет переменной декларирование вопрос
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' - это пакет глобальный (' $ Test :: Test :: c') с или без 'our', и любой, в пакете или без него, может получить к нему доступ под этим именем. Однако при включенном 'strict 'vars'' вы не можете просто называть его' $ c' даже в 'Test :: Test', если исключение не сделано с использованием' use vars' или лексический псевдоним создается с помощью 'our' , 'my' и' local', конечно, делают совершенно разные вещи. – hobbs
См. Также http://stackoverflow.com/questions/3626190/why-are-variables-declared-with-our-visible-across-files/3626333#3626333 для дальнейшего объяснения того, что именно мы делаем, как это отличается из 'use vars', и почему это не просто означает« сделать это видимым в этом пакете ». – hobbs
Правильно, это сочетание «использовать строгое» и «наше», что является значительным. Используя строгие силы, программист объявляет переменную и, таким образом, рассматривает область действия. –