Reputation: 46965
I would like to simply declare a read only attribute in Moose that cannot be initialized in a call to new. So after declaring the following:
package SOD::KuuAnalyze::ProdId;
use Moose;
has 'users' => (isa => 'ArrayRef[Str]', is => "ro");
1;
I do not want the following to work:
my $prodid = SOD::KuuAnalyze::ProdId->new(users => ["one", "two"]);
Upvotes: 7
Views: 963
Reputation: 66978
How about
package SOD::KuuAnalyze::ProdId;
use Moose;
has 'users' => (
isa => 'ArrayRef[Str]',
is => 'ro',
init_arg => undef,
default => sub { [ 'one', 'two' ] },
);
Setting the init_arg
to undef
seems to be necessary to disallow setting the attribute from the constructor.
Upvotes: 5
Reputation: 53976
Use the init_arg
attribute configuration (see "Constructor parameters" in Moose::Manual::Attributes):
package SOD::KuuAnalyze::ProdId;
use Moose;
has 'users' => (
isa => 'ArrayRef[Str]', is => "ro",
init_arg => undef, # do not allow in constructor
);
1;
Upvotes: 15