X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FAutobox%2FArray.pm;h=92b919b7ccfeba421facb8863024fc8a500fa291;hb=e477b088207df5ba75ee801a9ad8a0c93ced2d8f;hp=004e74e9d9525621ab8138347a465360238b805f;hpb=7fc998644d73be4152b086ab705cf77e53ce8ed5;p=gitmo%2FMoose-Autobox.git diff --git a/lib/Moose/Autobox/Array.pm b/lib/Moose/Autobox/Array.pm index 004e74e..92b919b 100644 --- a/lib/Moose/Autobox/Array.pm +++ b/lib/Moose/Autobox/Array.pm @@ -1,9 +1,9 @@ package Moose::Autobox::Array; use Moose::Role 'with'; use Perl6::Junction; -use autobox; +use Moose::Autobox; -our $VERSION = '0.01'; +our $VERSION = '0.03'; with 'Moose::Autobox::Ref', 'Moose::Autobox::List', @@ -36,7 +36,12 @@ sub delete { sub shift { my ($array) = @_; CORE::shift @$array; -} +} + +sub slice { + my ($array, $indicies) = @_; + [ @{$array}[ @{$indicies} ] ]; +} # NOTE: # sprintf args need to be reversed, @@ -112,28 +117,55 @@ sub kv { $array->keys->map(sub { [ $_, $array->[$_] ] }); } +sub flatten { + @{$_[0]} +} + +sub _flatten_deep { + my @array = @_; + my $depth = CORE::pop @array; + --$depth if (defined($depth)); + + CORE::map { + (ref eq 'ARRAY') + ? (defined($depth) && $depth == -1) ? $_ : _flatten_deep( @$_, $depth ) + : $_ + } @array; + +} + +sub flatten_deep { + my ($array, $depth) = @_; + [ _flatten_deep(@$array, $depth) ]; +} + ## Junctions sub all { my ($array) = @_; - return Perl6::Junction::All->all(@$array); + return Perl6::Junction::all(@$array); } sub any { my ($array) = @_; - return Perl6::Junction::Any->any(@$array); + return Perl6::Junction::any(@$array); } sub none { my ($array) = @_; - return Perl6::Junction::None->none(@$array); + return Perl6::Junction::none(@$array); } sub one { my ($array) = @_; - return Perl6::Junction::One->one(@$array); + return Perl6::Junction::one(@$array); } +## Print + +sub print { CORE::print @{$_[0]} } +sub say { CORE::print @{$_[0]}, "\n" } + 1; __END__ @@ -147,7 +179,6 @@ Moose::Autobox::Array - the Array role =head1 SYNOPOSIS use Moose::Autobox; - use autobox; [ 1..5 ]->isa('ARRAY'); # true [ a..z ]->does('Moose::Autobox::Array'); # true @@ -156,6 +187,8 @@ Moose::Autobox::Array - the Array role print "Squares: " . [ 1 .. 10 ]->map(sub { $_ * $_ })->join(', '); print [ 1, 'number' ]->sprintf('%d is the loneliest %s'); + + print ([ 1 .. 5 ]->any == 3) ? 'true' : 'false'; # prints 'true' =head1 DESCRIPTION @@ -177,6 +210,12 @@ This is a role to describe operations on the Array type. =item B +=item B + +=item B + +=item B + =back =head2 Indexed implementation @@ -213,6 +252,24 @@ This is a role to describe operations on the Array type. =item B +Note that, in both the above, $_ is in scope within the code block, as well as +being passed as $_[0]. As per CORE::map and CORE::grep, $_ is an alias to +the list value, so can be used to to modify the list, viz: + + use Moose::Autobox; + + my $foo = [1, 2, 3]; + $foo->map( sub {$_++} ); + print $foo->dump; + +yields + + $VAR1 = [ + 2, + 3, + 4 + ]; + =item B =item B @@ -237,6 +294,10 @@ This is a role to describe operations on the Array type. =item B +=item B + +=item B + =back =head1 BUGS @@ -251,11 +312,11 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2006 by Infinity Interactive, Inc. +Copyright 2006-2008 by Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. -=cut \ No newline at end of file +=cut