@arr = (1, 2, 3, 4, 5); map {print "** $_ **\n";} @arr; #### $ast_print = sub {print "** $_[0] **\n"}; process_and_print(25, $ast_print); sub process_and_print { my $val = $_[0]; my $print_func= $_[1]; #..... processing .... &$print_func($val); } #### $op = "print \"hello\""; eval $op; #### while (<>) { eval; print $@; }