use strict; use Data::Dumper; ... my %results; foreach my $name (@diffarray) { my $code_name = "${name}_diff"; no strict 'refs'; my $code = \&{ $code_name }; $results{ $name } = [ $code->() ]; }; print Dumper \%results; #### 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;