my @dispatch = ( { pattern => qr/DNI/, coderef => \&do_dni, }, { pattern => qr/SNI/, coderef => \&do_sni, }, ); foreach my $fn ( @filenames ) { foreach my $item ( @dispatch ) { $item->{coderef}->($fn) if ( $fn =~ $item->{pattern} ); } }