chella2104@gmail.com has asked for the wisdom of the Perl Monks concerning the following question:

use strict; # safety net use warnings; # safety net use feature 'say'; # a better "print" use Mojo; my $dom = Mojo::DOM->new; my $ua = Mojo::UserAgent->new; $dom= $ua->get('http://search.cpan.org/faq.html')->res->dom; my $desc=$dom->at('#u')->text;

when i trying to run this code above error has occur

The above link contains list of answers .But I want only first question answer

__DATA__

<h1><a class='u' name="I'm_having_trouble_connecting_to_search_and_I_think_it_may_be_down,_whom_do_I_contact?" >I'm having trouble connecting to search and I think it may be down, whom do I contact? <img alt='^' src='http://st.pimg.net/tucs/img/up.gif'></a></h1> <p>If you are having technical difficulties with the site itself, send mail to <i>cpansearch@perl.org</i> and try to be as detailed as possible in your note describing the problem.</p>

Anyone can help me
  • Comment on Can't call method "text" on an undefined value at usingmojo.pl line 11.
  • Download Code

Replies are listed 'Best First'.
Re: Can't call method "text" on an undefined value at usingmojo.pl line 11.
by beech (Parson) on Jan 11, 2016 at 08:31 UTC
    What you posted only has 9 lines not 11 ... anyway, basically  $dom->at('#u') is failing ... as expected, "u" is an odd name for an id, its too short, and it isn't "I'm_having_trouble...."

    You can find using ".u" to match by class and "p" to match by paragraph

Re: Can't call method "text" on an undefined value at usingmojo.pl line 11.
by Corion (Patriarch) on Jan 11, 2016 at 08:33 UTC

    If you get a list of answers, why don't you just take the first element of that list?

    I think your problem is in the structure of the HTML and that the #u element does not have the elements you want as its immediate children. I would restructure the CSS query to match all elements I want, and only these.

    Another approach is to solve this by programming in Perl, and retrieving all answers and then only using the first.