foo
[gitmo/Moose-Autobox.git] / lib / Moose / Autobox / Array.pm
index c58198e..6144e6f 100644 (file)
@@ -1,5 +1,6 @@
 package Moose::Autobox::Array;
 use Moose::Role 'with';
+use autobox;
 
 our $VERSION = '0.01';
 
@@ -24,7 +25,8 @@ sub map {
 }
 
 sub join { 
-    my ($array, $sep) = @_;     
+    my ($array, $sep) = @_;    
+    $sep ||= ''; 
     CORE::join $sep, @$array; 
 }
 
@@ -43,23 +45,22 @@ sub sort {
 
 sub reduce {
     my ($array, $func) = @_;
-    my @a = @$array;
-    my $acc = CORE::shift @a;
-    $acc = $func->($acc, $_) foreach @a;
+    my $a = $array->values;
+    my $acc = $a->shift;
+    $a->map(sub { $acc = $func->($acc, $_) });
     return $acc;
 }
 
 sub zip {
     my ($array, $other) = @_;
-    [ 
-        CORE::map { 
-            [ $array->[$_], $other->[$_] ]        
-        } 0 .. $#{(
-            CORE::scalar @{$array} < CORE::scalar @{$other} 
-                ? $other : $array
-        )}
-    ];
-} 
+    ($array->length < $other->length 
+        ? $other 
+        : $array)
+            ->keys
+            ->map(sub {
+                [ $array->[$_], $other->[$_] ]
+            });
+}
 
 ## 
 
@@ -75,7 +76,7 @@ sub values {
 
 sub kv {
     my ($array) = @_;   
-    [ CORE::map { [ $_, $array->[$_] ] } (0 .. $#{$array}) ];
+    $array->keys->map(sub { [ $_, $array->[$_] ] });
 }
 
 ## Array Interface
@@ -111,5 +112,4 @@ sub shift {
     CORE::shift @$array; 
 }
 
-
 1;