use strict; use warnings; my $data = "Just another Perl hacker,"; my $action = 'subst'; my $pattern = 'hacker'; my $substitution = 'enthusiast'; my %actions = ( match => sub { my $rv = $_[0] = ~m/$_[1]/; return( $rv, [@-], [@+] ) }, subst => sub { my $rv = $_[0] =~ s/$_[1]/$_[2]/; return( $rv, [@_], [@+] ) }, ); exists $actions{$action} or die "Invalid action: $action"; my @results = $actions{$action}->($data, $pattern, $substitution); print $data, "\n";