use List::Util qw( reduce ); my %ops = ( add => '+', multiply => '*', # etc ... ); %ops = map { $_ => eval q(sub { reduce { $a ) . $ops{$_} . q( $b } @_ }) } keys %ops; # And so forth.