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

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

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

    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 ;-)

      Which is, by the way, exactly equivalent to
      has qw< friends is rw isa Array default >;
      لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

        Just keeping it analogous to OP's example. Test code was this:

        $ perl -wMstrict -MData::Dump=pp sub has { print pp(@_),"\n" } 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/, (); __END__ ("friends", "is", "rw", "isa", "Array", "default") ("friends", "is", "rw", "isa", "Array", "default") ("friends", "is", "rw", "isa", "Array", "default") ("friends", "is", "rw", "isa", "Array", "default") ("friends", "is", "rw", "isa", "Array", "default") ("friends", "is", "rw", "isa", "Array", "default")