Johannes Z. Lichtenberger: Simple RegExp.-Suche

Hallo.

Innerhalb eines Scriptes übergebe ich mittels <form action="search.pl" method="post"> unter anderem jenen Wert an eben dieses:
<textarea name="websites" cols="70" rows="6" maxsize="500"></textarea>

Nun erscheint 'Can't call method "param" on an undefined value at D:\Server\Apache2\cgi-bin\search.pl line 53'.

Im Prinzip ist alles was das Script nun tut auf den Websiten die übergeben wurden nach einem Ausdruck zu suchen:

if ($query->param()) {
  foreach (my $query->param('websites') =~ /(http\S*)/gi) {          #<- line 53
    my $uri = $1;
    if (is_success(my $content = get("$uri"))) {
      print "<ul>\n";
      if ($content =~ /$query->param('suche')/ig) {
        print "<li><a href="$uri">$uri</a></li>\n" if my $query->param('treffer');
      }
      else {
        print "<li><a href="$uri">$uri</a></li>\n" if my $query->param('ktreffer');
      }
      print "</ul>\n";
    }
  }
}

Verwendete Module/Pragmas:
use warnings;
use diagnostics;
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use LWP::Simple;

Johannes

  1. Nun erscheint 'Can't call method "param" on an undefined value at D:\Server\Apache2\cgi-bin\search.pl line 53'.

    Im Prinzip ist alles was das Script nun tut auf den Websiten die übergeben wurden nach einem Ausdruck zu suchen:

    if ($query->param()) {
      foreach (my $query->param('websites') =~ /(http\S*)/gi) {          #<- line 53

    my $query ist nicht definiert. Mach mal das my davor weg.

    Struppi.

    1. Nun erscheint 'Can't call method "param" on an undefined value at D:\Server\Apache2\cgi-bin\search.pl line 53'.

      Im Prinzip ist alles was das Script nun tut auf den Websiten die übergeben wurden nach einem Ausdruck zu suchen:

      if ($query->param()) {
        foreach (my $query->param('websites') =~ /(http\S*)/gi) {          #<- line 53

      my $query ist nicht definiert. Mach mal das my davor weg.

      Struppi.

      Danke, habe das Script aber nochmal etwas umgeschrieben (mittels LWP::UserAgent nun), um Status-Codes zu erhalten.

      Dummerweise kommt nun immer:
      Error: 400 URL must be absolute

      unless ($response->is_success || $response->code == 301 || $response->code == 302) {
            print "<li><a href="$uri">$uri</a> | ".$query->param('suche')." | Error: ".$response->code." ".$response->message."</li>\n";
          }

      http://visualgrafyx.com/publications/learn-to-seek/ sollte ja nun wirklich absolut sein ;-)

      Insgesamt:

      if ($query->param()) {
        foreach ((my $uri = $query->param('websites')) =~ /(http\S*)/gi) {
          my $ua = LWP::UserAgent->new;
          my $response = $ua->get('$uri');
          print "<ul>\n";

      unless ($response->is_success || $response->code == 301 || $response->code == 302) {
            print "<li><a href="$uri">$uri</a> | ".$query->param('suche')." | Error: ".$response->code." ".$response->message."</li>\n";
          }
          elsif ($response->content =~ /($query->param('suche'))/i) {
            print "<li><a href="$uri">$uri</a> | ".$1."</li>\n" if $query->param('treffer');
          }
          else {
            print "<li><a href="$uri">$uri</a> | ".$query->param('suche')."</li>\n" if $query->param('ktreffer');
          }

      print "</ul>\n";
        }
      }

      Johannes

      1. if ($query->param()) {
          foreach ((my $uri = $query->param('websites')) =~ /(http\S*)/gi) {

        Natürlich
          foreach ((my @uri) = $query->param('websites') =~ /(http\S*)/gi) {
            my $uri = shift @uri;

        Kommt allerdings irgendwie auf's gleiche raus.

      2. Danke, habe das Script aber nochmal etwas umgeschrieben (mittels LWP::UserAgent nun), um Status-Codes zu erhalten.

        Dummerweise kommt nun immer:
        Error: 400 URL must be absolute

        unless ($response->is_success || $response->code == 301 || $response->code == 302) {
              print "<li><a href="$uri">$uri</a> | ".$query->param('suche')." | Error: ".$response->code." ".$response->message."</li>\n";
            }

        http://visualgrafyx.com/publications/learn-to-seek/ sollte ja nun wirklich absolut sein ;-)

        ist sie aber nicht, da fehlt nioch index.htm oder welcome.htm je nachdem.

        Struppi.

        1. Danke, habe das Script aber nochmal etwas umgeschrieben (mittels LWP::UserAgent nun), um Status-Codes zu erhalten.

          Dummerweise kommt nun immer:
          Error: 400 URL must be absolute

          unless ($response->is_success || $response->code == 301 || $response->code == 302) {
                print "<li><a href="$uri">$uri</a> | ".$query->param('suche')." | Error: ".$response->code." ".$response->message."</li>\n";
              }

          http://visualgrafyx.com/publications/learn-to-seek/ sollte ja nun wirklich absolut sein ;-)

          ist sie aber nicht, da fehlt nioch index.htm oder welcome.htm je nachdem.

          http://visualgrafyx.com/publications/learn-to-seek/index.html

          Klappt nicht -> Error: 400 URL must be absolute

          1. Nun klappt es soweit, komisch nur, dass

            elsif ($response->content =~ /$query->param('suche')/gi) {
                  print "<li><a href="$uri">$uri</a> | Suchausdruck: ".html_escape($query->param('suche'))." -> gefunden</li>\n" if $query->param('treffer');
                }

            nie matcht :-/
            Es wird immer die else-Anweisung am Ende ausgeführt.