lib/PublicInbox/SearchMsg.pm | 16 ++++++++++------ diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm index a9f3180b827e9c8aac8351671dce988d9b08459e..4ad8a0c95e898249fdd2b9a889bf148ff01138f4 100644 --- a/lib/PublicInbox/SearchMsg.pm +++ b/lib/PublicInbox/SearchMsg.pm @@ -110,7 +110,6 @@ sub ensure_metadata { my ($self) = @_; my $doc = $self->{doc}; - my $i = $doc->termlist_begin; my $end = $doc->termlist_end; unless (defined $PFX2TERM_RE) { @@ -118,12 +117,17 @@ my $or = join('|', keys %PublicInbox::Search::PFX2TERM_RMAP); $PFX2TERM_RE = qr/\A($or)/; } - for (; $i != $end; $i->inc) { - my $val = $i->get_termname; + while (my ($pfx, $field) = each %PublicInbox::Search::PFX2TERM_RMAP) { + # ideally we'd move this out of the loop: + my $i = $doc->termlist_begin; - if ($val =~ s/$PFX2TERM_RE//o) { - my $field = $PublicInbox::Search::PFX2TERM_RMAP{$1}; - $self->{$field} = $val; + $i->skip_to($pfx); + if ($i != $end) { + my $val = $i->get_termname; + + if ($val =~ s/$PFX2TERM_RE//o) { + $self->{$field} = $val; + } } } }