sub function_1 { print "One\n" } sub function_2 { print "Two\n" } { # Allow symbol table manipulation. # You do use strict;, right? :) no strict 'refs'; foreach my $no ( 1 .. 2 ) { &{ "function_$no" }; # <--- THIS THING } } #### sub function_1 { print "One\n" } sub function_2 { print "Two\n" } my %functions = ( 'DEFAULT' => sub { print "Huh?\n" }, 1 => \&function_1, 2 => \&function_2, ); foreach my $no ( 1 .. 3 ) { $no = 'DEFAULT' unless exists $functions{$no}; $functions{$no}->(); }