our $which_matched; sub assemble_regex { my %regexes = @_; return join '|', map { q[(?:$regexes{$_})(?{\$which_matched='$_'})]} keys %regexes; }