sub map_With_Ref { # kvale ... my( $sub )= shift( @_ ); &$sub( map { \$_->[0] } @_ ); # ^^^^^^^^^^^^^^^^^^ Here is the selection code } sub map_With_Closure { # NetWallah my( $sub )= shift( @_ ); my @closures; foreach my $aref(@_){ push @closures, sub :lvalue{ $aref->[0] }; } &$sub( @closures ); # I had trouble attempting to dynamically build the equivalent of the # @closures array using the "map {BLOCK}" syntax - apparently that # conflicts with lvalue subs. } sub map_pass_as_Param{ #tinita's code... my( $sub )= shift( @_ ); &$sub( $_->[0]) for @_; # Call once for each param passed } sub map_twice{ # NetWallah my( $sub )= shift( @_ ); &$sub( map {$_} map { \$_->[0] } @_ ); } my @a= ( 1..3 ); my @b= ( 4..6 ); my @c= ( 7..9 ); sub addten_Ref { $$_ += 10 for @_ } sub addten_With_Closure { &$_() += 10 for @_ } sub addten_call_Sub { $_[0]+=10} # Only ONE param passed, multiple calls sub addten_array { $_ += 10 for @_ } print "--- REF test --\n"; map_With_Ref( \&addten_Ref, \@a, \@b, \@c ); map_With_Ref( sub { print "$$_\n" for @_ }, \@a, \@b, \@c ); print "--- Closure test --\n" ; map_With_Closure( \&addten_With_Closure, \@a, \@b, \@c ); map_With_Closure( sub { print &$_() . "\n" for @_ }, \@a, \@b, \@c ); print "--- Calling Passed Sub test --\n"; map_pass_as_Param( \&addten_call_Sub, \@a, \@b, \@c ); map_pass_as_Param( sub { print shift . "\n" }, \@a, \@b, \@c ); print "--- Double-mapping test --\n"; # "Map-twice" should have been called here **** map_pass_as_Param( \&addten_array, \@a, \@b, \@c ); map_pass_as_Param( sub { print "@_\n" }, \@a, \@b, \@c ); #### --- OUTPUT---- --- REF test -- 11 14 17 --- Closure test -- 21 24 27 --- Calling Passed Sub test 31 34 37 --- Double-mapping test -- 41 44 47