each, each_key, each_value for indexed
Ricardo Signes [Mon, 12 Oct 2009 15:07:26 +0000 (11:07 -0400)]
lib/Moose/Autobox/Array.pm
lib/Moose/Autobox/Hash.pm
lib/Moose/Autobox/Indexed.pm

index 74a45d2..21ce08a 100644 (file)
@@ -117,6 +117,27 @@ sub kv {
     $array->keys->map(sub { [ $_, $array->[$_] ] });
 }
 
+sub each {
+    my ($array, $sub) = @_;
+    for my $i (0 .. $#$array) {
+      $sub->($i, $array->[ $i ]);
+    }
+}
+
+sub each_key {
+    my ($array, $sub) = @_;
+    for my $i (0 .. $#$array) {
+      $sub->($i);
+    }
+}
+
+sub each_value {
+    my ($array, $sub) = @_;
+    $sub->($_) for @$array;
+}
+
+# end indexed
+
 sub flatten {
     @{$_[0]}
 }
index 84b8c31..67f94b1 100644 (file)
@@ -62,7 +62,27 @@ sub kv {
 sub slice {
     my ($hash, $keys) = @_;
     return [ @{$hash}{@$keys} ];
-};
+}
+
+sub each {
+    my ($hash, $sub) = @_;
+    for my $key (CORE::keys %$hash) {
+      $sub->($key, $hash->{$key});
+    }
+}
+
+sub each_key {
+    my ($hash, $sub) = @_;
+    $sub->($_) for CORE::keys %$hash;
+}
+
+sub each_value {
+    my ($hash, $sub) = @_;
+    $sub->($_) for CORE::values %$hash;
+}
+
+
+# End Indexed
 
 sub print   { CORE::print %{$_[0]} }
 sub say     { CORE::print %{$_[0]}, "\n" }
index 551a28c..e2f5362 100644 (file)
@@ -10,6 +10,7 @@ requires 'keys';
 requires 'values'; 
 requires 'kv';
 requires 'slice';
+requires qw(each each_key each_value);
 
 1;
 
@@ -54,6 +55,14 @@ and L<Moose::Autobox::Hash> implement this role.
 
 =item B<kv>
 
+=item B<slice>
+
+=item B<each>
+
+=item B<each_key>
+
+=item B<each_value>
+
 =back
 
 =head1 BUGS