my @patterns = slurp( 'file' ); my %dispatch; @dispatch{ @patterns } = ( ??? ); my $regex = '(', join( ')|(', @patterns ) . ')'; while( my $data = ) { if( $data =~ $regex ) { $dispatch{ $patterns[ $#- ] }->( $1 ); } }