dannoura has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I'm trying to use the module WWW::Search (v2.39) with the backend (basically an add-on to enable searching on this site) PubMed.pm. Unfortunately, whenever I try to run the example code:

#! c:\perl\bin use WWW::Search; $query = "lung cancer treatment"; $search = new WWW::Search('PubMed'); $search->native_query(WWW::Search::escape_query($query)); $search->maximum_to_retrieve(100); while (my $result = $search->next_result()) { $url = $result->url; $title = $result->title; $desc = $result->description; print "<a href=$url>$title<br>$desc<p>\n"; }

I get:

unknown search engine backend PubMed (Can't locate WWW/Search/PubMed.p +m in @INC (@INC contains: C:\Perl\lib C:\Perl\site\lib .) at (eval 5) + line 2. BEGIN failed--compilation aborted at (eval 5) line 2. ) at C:\Perl\progs\test2.pl line 6

At first I thought there was some problem with the installation but ppm says the WWW::Search installation was ok and CPAN says ditto for PubMed.pm. I also tried:

BEGIN { push @INC, "c:\perl\site\lib\pubmed.pm"; }

before and after the use statement, but that didn't help. I thought of looking into the actual .pm files but gave up quickly since I'm still a newbie and don't want to destroy the code.

Does anyone have any idea about how to deal with this?

Replies are listed 'Best First'.
Re: problems with search module backend
by gellyfish (Monsignor) on Jul 01, 2003 at 10:00 UTC

    are you sure you have PubMed.pm in c:\perl\site\lib\www\search which is where the backends are supposed to believe as I understand it.

    /J\
    

      OK, that works. Thanks.

Re: problems with search module backend
by BrowserUk (Patriarch) on Jul 01, 2003 at 10:06 UTC

    The problem is that you haven't installed PubMed.pm in the correct place. How did you install it?

    If you move the file from it's current location in c:\perl\site\lib\

    to c:\perl\site\lib\WWW\Search\

    It will probably work, though perhaps a better answer would be to re-install the module using CPAN.pm.


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller


Re: problems with search module backend
by broquaint (Abbot) on Jul 01, 2003 at 10:06 UTC
    The PubMed.pm file needs to be located in WWW\Search e.g
    c:\perl\site\lib\WWW\Search\PubMed.pm
    This is because perl searches for modules like so - splits on the :: of the given package name, where everything up to the last element is a directory and the last element is the name of the file with a .pm automatically appeneded and then this path is search for in the one of the @INC directories (left-to-right) until found. In code it might look like this
    use File::Spec::Functions; sub use { my($pkg, @args) = @_; my(@dirs, $file) = split '::', $pkg; my $path = catfile @dirs, "$file.pm"; eval q< BEGIN { my($lib) = grep { -f cafile($_, $path) } @INC; my $code = IO::File->new(catfile $lib,$path) or die "ack - $!"; $INC{$path} = catfile $lib, $path; eval $code->getlines; $file->import(@args); } >; }
    You can find further details in perlmod.
    HTH

    _________
    broquaint