Re: Moose not adequately idiot-proof?
[email protected] (Darren Duncan) Mon, 20 May 2013 16:07:06 -0700
| Newsgroups | perl.moose |
|---|---|
| Message-ID | <[email protected]> |
If that was just done as part of a test suite though, and not in production, the performance hit might be worth it. -- Darren Duncan On 2013.05.20 3:07 PM, Chris Prather wrote: > Using the hashref directly totally circumvents moose. You would need to write > something like MooseX::Globref that replaces the instance type with a restricted > hash. This would seriously impact performance. > > -Chris > — > Sent from Mailbox <https://bit.ly/SZvoJe> for iPhone > > > On Mon, May 20, 2013 at 5:55 PM, Sam Brain <[email protected] > <mailto:[email protected]>> wrote: > > I have a simple application which uses Moose (example copied from > Moose::Manual::MooseX pages) > > package User; > > use Moose; > use MooseX::StrictConstructor; > use namespace::autoclean; > > has 'name' => (is => 'rw', isa => 'Str'); > has 'email' => (is => 'rw', isa => 'Str'); > > package main; > > my $bob = User->new( name => 'Bob', email => '[email protected]' ); > > say $bob->name; # prints 'Bob' > say $bob->naem; # Exits with error: 'Can't locate object method "naem" .. > > All is good so far. > Then, much later, in an Idiot Moment, I forgot my "objects" were Moose > objects and not hashrefs, and wrote: > > say $bob->{name}; # prints 'Bob' (!) > > say "OK" unless($bob->{naem}); # prints "OK", gives no error! > > $bob->name = "Robert"; # dies with "Can't modify non-lvalue subroutine > call..." - Good! > $bob->{name} = "Robert"; # doesn't die! > > say $bob->name; # prints 'Robert' (!) > > $bob->{naem} = "Roberto"; > > say $bob->{naem}; # prints 'Roberto' (!) > > say $bob->naem; # Exits with error: 'Can't locate object method "naem" ' (Whew!) > > say Dumper($bob); # gives: > # $VAR1 = bless( { > # 'email' => '[email protected]', > # 'naem' => 'Roberto', > # 'name' => 'Robert' > # }, 'User' ); > > Now I know any software cannot be totally immune from extreme idiocy like > mine, but I was surprised how quickly I got myself in trouble. Is there a > MooseX::StrictSomething which could have help me avoided this? (Yes I know: > "more exercise of the Little Grey Cells" - apart from that?) > > Thanks > > Sam Brain > > -- > Sam Brain > Department of Radiation Oncology > Stanford Cancer Center > Phone: 650-723-6967 > >