Проверяю доступность переменных my, объявленных в пакете. Это нечто вроде закрытых статических членов класса.
Базовый класс:
#!/usr/bin/perl
package MyTest;
use strict;
use warnings 'all';
my $int;
sub init { $int = 2 }
sub get_int { $int }
1;
Дочерний класс:
#!/usr/bin/perl
package MyTest2;
use strict;
use warnings 'all';
use MyTest;
our @ISA = ('MyTest');
sub init { $MyTest::int = 20 }
sub get_int { $MyTest::int }
1;
Тест:
#!/usr/bin/perl
use strict;
use warnings 'all';
use 5.010;
use MyTest2;
MyTest::init;
say 'MyTest: ', MyTest::get_int;
MyTest2::init;
say 'MyTest2: ', MyTest2::get_int;
say 'MyTest: ', MyTest::get_int;
Результат:
MyTest: 2
MyTest2: 20
MyTest: 2
Получается, что в MyTest2::init была создана новая переменная. Подмечу, что use warnings all и use strict, но ошибок нет. А вот если в MyTest.pm закомментировать объявление «my $int», то будут ошибки в обоих init(). Пока не нашел обоснование в документации.
Проверил: это я создал открытую переменную пакета:
sub init { $MyTest::int = 20 }