sub imap { my ($transform, $it) = @_; return Iterator { my $next = NEXTVAL($it); return unless defined $next; return $transform->($next); } } #### #!/usr/bin/env perl use 5.010; use strict; use warnings; sub foo(&@) { my $coderef = shift; my @params = @_; my @ret; while(@params) { push @ret, $coderef->($_); } return @ret; } my @a = ( "1", "2", "3", "4", ); my @b = foo { $_ ** 2 } @a; #### my @b = foo { $_ = shift; $_ ** 2 } @a; my @b = foo { my $var = shift; $var ** 2 } @a; #### #!/usr/bin/env perl use 5.010; use strict; use warnings; sub foo(&@) { my $coderef = shift; my @params = @_; my @ret; for(@params) { push @ret, $coderef->(); } return @ret; } my @a = ( "1", "2", "3", "4", ); my @b = foo { $_ ** 2 } @a;