my @parsers; sub add_parser { my $name = shift; my $re = shift; my %parser = ( name => $name, re => qr/$re/, code => sub { print "Hi, I'm parser $name, who are you?" }, ); push @parsers, \%parser; } add_parser( "HelloWorld", "foo" ); # ... my $find_this = "ffoobar"; foreach my $parser ( @parsers ) { if ( $find_this =~ $parser->{re} ) { &{$parser->{code}}; } }