[Xapian-discuss] Perl example of using termitrator?
Olly Betts
olly at survex.com
Sun Oct 7 00:21:12 BST 2007
On Sun, Sep 30, 2007 at 05:35:00PM -0400, Jim wrote:
> foreach my $match ( @matches ) {
> my %hit;
> my %ht;
> my $doc = $match->get_document();
> my $per = $match->get_percent();
> my $id = $match->get_docid();
> my $bterm = $enq->get_matching_terms_begin($id);
> for(my $xit=$bterm;$xit !=
> $enq->get_matching_terms_end($id);$xit++) {
> my $term=$xit;
> print $term;
> }
>
> Which doesn't really make any sense. Xit is a string and I don't see
> how incrementing a string will do anything useful. So how do you
> increment the iterator?
Actually, $xit is an object, but overloads "" so when you print it you
get a string. Just use "++" to increment, like you are already doing
(though the preincrement may be more efficient - i.e. ++$xit). Or
you can use "inc".
> This does return the terms until it hits the end case then it hangs,
> perl just keeps clocking time. I have to kill it.
Not sure what's going on here. You used to have to use "ne" not "!=" to
compare iterators but we added overloads for "!=" ages ago as it was too
easy to get wrong.
Can you post a complete script to demonstrate this hang?
> If I run the following, the same thing happens:
> my %eterm = $enq->get_matching_terms_end($id);
That's assigning an iterator object to a hash - what do you expect it to
do?
Cheers,
Olly
More information about the Xapian-discuss
mailing list