use strict; use Data::Dumper; ... my %results; my %dispatch = ( test => \&test_diff, info => \&info_diff, path => \&path_diff, ... ); foreach my $name (@diffarray) { if ( ! exists $dispatch{$name}) { die "Don't know how to handle name '$name'."; }; my $code = $dispatch{$name}; $results{ $name } = [ $code->() ]; }; print Dumper \%results;