Task

Pass a function     as an argument     to another function.



Related task

   First-class functions


sub another {
    # take a function and a value
    my $func = shift;
    my $val  = shift;
 
    # call the function with the value as argument
    return $func->($val);
};
 
sub reverser {
    return scalar reverse shift;
};
 
# pass named coderef
print another \&reverser, 'data';
# pass anonymous coderef
print another sub {return scalar reverse shift}, 'data';
 
# if all you have is a string and you want to act on that,
# set up a dispatch table
my %dispatch = (
    square => sub {return shift() ** 2},
    cube   => sub {return shift() ** 3},
    rev    => \&reverser,
);
 
print another $dispatch{$_}, 123 for qw(square cube rev);