How can I prevent Perl Moose Read-Only Attributes being set upon a call to new?

attributes, moose, new-operator, perl

Solution

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;

Problem

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"]); ```

Original source