NAME MooseX::Lists - treat arrays and hashes as lists SYNOPSIS package Stuff; use Moose; use MooseX::Lists; has_list a => ( is => 'rw', isa => 'Array'); has_list h => ( is => 'rw', isa => 'Hash' ); has_list same_as_a => ( is => 'rw' ); ... my $s = Stuff-> new( a => [1,2,3], h => { a => 1, b => 2 } ); my @list = $s-> a; # ( 1 2 3 ) my $scalar = $s-> a; # [ 1 2 3 ] $s-> a(1,2,3); # 1 2 3 $s-> a([1,2,3]); # 1 2 3 $s-> a([]); # empty array $s-> a([[]]); # [] my %list = $s-> h; # ( a => 1, b => 2 ) my $sc = $s-> h; # { a => 1, b => 2 } $s-> h(1,2,3,4); # 1 2 3 4 $s-> h({1,2,3,4}); # 1 2 3 4 $s-> h({}); # empty hash DESCRIPTION Provides asymmetric list access for arrays and hashes. METHODS has_list Replacement for "has", with exactly same syntax, expect for "isa", which can be either "Array" or "Hash". "[]" notation is not supported. When a method is declared with "has_list", internally it is a normal perl array or hash (Moose's "ArrayRef" and "HashRef" don't apply). The method behaves differently if called in scalar or list context. See below for details. Array In get-mode, behaves like "auto_deref": in scalar context, returns direct reference to the array, list context, returns defereenced array. In set-mode behaves asymmetrically: if passed one argument, and this argument is an arrayref, treats it as an arrayref, otherwise dereferences the arguments and creates a new arrayref, which is stored internally. I.e. the only way to clear the array is to call " -"method([]) >. Hash In get-mode, behaves like "auto_deref": in scalar context, returns direct reference to the hash, list context, returns defereenced hash. In set-mode behaves asymmetrically: if passed one argument, and this argument is a hashref, treats it as a hashref, otherwise dereferences the arguments and creates a new hashref, which is stored internally. I.e. the only way to clear the hash is to call " -"method({}) >. AUTHOR Dmitry Karasik, . THANKS Karen Etheridge, Jesse Luehrs.