Мне не удалось найти способ сделать атрибуты Moose полностью приватными.Всякий раз, когда я использую has 'name' => (...);
для создания атрибута, он всегда подвергается чтению как минимум.Для элементов, которые я хочу быть по-настоящему приватными, я использую стандартные переменные "my" внутри пакета Moose.Для быстрого примера возьмем следующий модуль «CountingObject.pm».
package CountingObject;
use Moose;
my $cntr = 0;
sub add_one { $cntr++; }
sub get_count { return $cntr; }
1;
Скрипты, использующие этот модуль, не имеют прямого доступа к переменной $ cntr.Они должны использовать методы «add_one» и «get_count», которые действуют как интерфейс с внешним миром.Например:
#!/usr/bin/perl
### Call and create
use CountingObject;
my $co = CountingObject->new();
### This works: prints 0
printf( "%s\n", $co->get_count() );
### This works to update $cntr through the method
for (1..10) { $co->add_one(); }
### This works: prints 10
printf( "%s\n", $co->get_count() );
### Direct access won't work. These would fail:
# say $cntr;
# say $co->cntr;
Я новичок в Moose, но, насколько я могу судить, этот подход обеспечивает полностью приватные переменные.