use strict; my @start_list = (qw/ one two three four five six /); my $function = sub { uc }; my @end_list = fake_map( $function, @start_list ); #equivalent to @end_list = map { &$function } @start_list; my %end_hash = fake_map( $function, @start_list ); #equivalent to %end_hash = map { &$function } @start_list; print (join (' ', @end_list, "\n") ); foreach (keys %end_hash) { print "hash{'$_'} = $end_hash{$_}\n"; } sub fake_map { my $func = shift; my @instack = @_; my @outstack = (); foreach (@instack) { push (@outstack, &$func); } return @outstack; }