in reply to Re: Perl Moose syntax
in thread Perl Moose syntax

Because inside has subroutine you can assign value more clearly.
like:

my ($prop_name,$prop_options)=@_

Replies are listed 'Best First'.
Re^3: Perl Moose syntax
by Anonymous Monk on Dec 28, 2014 at 03:23 UTC

    What's wrong with my ($prop_name,%prop_options) = @_;? Dereferencing a $prop_options would mean a bit more typing.

      Oh sorry what I meant is actually:

      has 'friends' => { is => 'rw', isa => 'Array', default => () };

      Anyway the reason I said the latter syntax makes more sense is because I saw the latter syntax more often. For example In https://metacpan.org/pod/HTML::Template#TMPL_LOOP:

      $template->param( EMPLOYEE_INFO => [{name => 'Sam', job => 'programmer'}, {name => ' +Steve', job => 'soda jerk'}] ); print $template->output();

      This code uses reference(array) because of clarity and I think most subroutines uses this syntax.
      However this line

      has 'friends' => ( is => 'rw', isa => 'Array', default => () );

      is same as:

      has 'friends',is => 'rw', isa => 'Array', default => ();

      which is not clear and as for me that looks just weird.
      But when using reference, you don't have to use awkward arrow between 'friends' and 'is'

      has 'friends',{ is => 'rw', isa => 'Array', default => () };

      Of course, not using reference parameter saves some typing but that saves typing of Moose's author, not of us. And using reference is also not a big deal.Clarity is more important

        These are all exactly equivalent:

        has 'friends' => ( is => 'rw', isa => 'Array', default => () ); has friends => ((is => 'rw'), (isa => 'Array'), (default => ())); has friends => is => 'rw', isa => 'Array', default => (); has friends => is => rw => isa => Array => default => (); has "friends", "is", "rw", "isa", "Array", "default", (); has qw/friends is rw isa Array default/, ();

        Moose has just chosen to write things the way they do, but you're free to choose any of the above, whichever is clearest to you - that's a lot of freedom! It's just a matter of taste, and arguing about it is just like arguing about whether your sandwich tastes better depending on if it's sliced diagonally, horizontally or vertically ;-)