package LockedBox;
use Moose;
use MooseX::StrictConstructor;
use Hash::Util qw[ lock_keys lock_value ];
has bar => ( is => 'ro' );
sub BUILD {
my $self = shift;
lock_keys( %$self );
foreach my $attr ( $self->meta->get_all_attributes ) {
lock_value( %$self, $attr->name )
}
}
####
my $foo = LockedBox->new( bar => 10 );
##
##
my $foo = LockedBox->new( bar => 10, baz => 100 );
##
##
$foo->{baz} = 20;
##
##
$foo->{bar} = 20;