Didi: Fehlerabfrage bei getprint

Hi all,
bisher habe ich in meinem Perl-Programm die statements

use LWP::Simple;
  getprint("$URL/up.inc");

Da das up.inc immer vorhanden war, habe ich keinerlei Fehlerabfragen
eingebaut.
Jetzt möchte ich unterschiedliche up.inc verwenden.
Wenn es in der $URL nicht vorhanden ist, soll es von $URL1 gelesen werden.
Wie kann ich das realisieren?
Bitte erwartet von mir keine großen Perl-Kenntnisse und schon gar keine Englisch-Kenntnisse (sodass ich die engl. Perl-Dokumentation lesen könnte).
Ich hoffe Ihr könnt mir dennoch helfen.

  1. moin,

    bisher habe ich in meinem Perl-Programm die statements

    use LWP::Simple;
      getprint("$URL/up.inc");

    Da das up.inc immer vorhanden war, habe ich keinerlei Fehlerabfragen
    eingebaut.
    Jetzt möchte ich unterschiedliche up.inc verwenden.
    Wenn es in der $URL nicht vorhanden ist, soll es von $URL1 gelesen werden.
    Wie kann ich das realisieren?

    Vorschlag:

    mach vorher ein head($URL) und alles Weitere davon abhängig.

    Bitte erwartet von mir keine großen Perl-Kenntnisse

    die Kontrollstruktur bringst Du doch hin oder ;-)

    und schon gar keine Englisch-Kenntnisse (sodass ich die engl. Perl-Dokumentation lesen könnte).

    Dann wirds aber Zeit! Und soo schwer ist das technische Englisch nun auch wieder nicht.

    --roro

    1. die Kontrollstruktur bringst Du doch hin oder ;-)

      Leider nicht, wenn ich nicht ein Muster habe.

      1. Moin,

        die Kontrollstruktur bringst Du doch hin oder ;-)

        Leider nicht, wenn ich nicht ein Muster habe.

        Ok, dann machen wir mal ein Muster:

        wenn(Statement 1 wahr wird){
         machen wir dasda;
        }
        sonstwenn(Statement 2 wahr wird){
         machen wir dingsda;
        }
        sonstwenn(Statement 3 wahr wird){
         machen wir diesda;
        }
        ansonsten{
         machen wir bumsfallera;
        }

        PERL:
        wenn      => if
        sonstwenn => elsif
        ansonsten => else

        Und hier noch ein richtig guter Link zu PERL:
        http://perl-seiten.privat.t-online.de/

        Viele Grüße und Gud Lack!
        Rolf

        --
        natürlich heißt es "good luck", was soviel heißt wie "viel Glück" ;-)
        1. Ok, dann machen wir mal ein Muster:

          Da haben wir und missverstanden.
          Die if-else-Konstrikte kenne ich sehr wohl, nicht aber die Perl-Variablen, die man auf Fehler abfragen muss.
          Wie mein Beitrag von soeben zeigt, funktioniert es, wenn die Datei da ist, nicht aber, wenn sie fehlt.

    2. Hallo,
      ich habe inzwischen ein Muster mit dem UserAgent gefunden

        
      #!/usr/bin/perl -w  
      use strict;  
        
      ....  
        
            use LWP::UserAgent;  
            my $ua = new LWP::UserAgent;  
            my $url = 'http://www.test.de/Muster.inc';  
            my $request = new HTTP::Request ('HEAD', $url);  
            my $response = $ua->request($request);  
            print  $response->is_success;  
            print "<br>";  
           print $response->message;  
           exit(3);  
      
      

      Wenn die Datei "http://www.test.de/Muster.inc" vorhanden ist,
      kommt als Ergebnis
      1
      OK

      Wenn ich aber den Namen einer nicht vorhandenen Datei angebe,
      hätte ich als Ergebnis erwartet
      0
      ... Fehlertext ..

      allerdings gerät das Programm in eine Schleife bis ich es schließlich abbreche!
      Im Log stehen entsprechend viele Zeilen, dass die Datei nicht gefunden wurde.
      Im Windows (XP) Taskmanager ist der Prozess perl.exe entsprechend oft aufgeführt.
      Woran kann dies liegen?

      1. Wenn ich aber den Namen einer nicht vorhandenen Datei angebe,
        hätte ich als Ergebnis erwartet
        0
        ... Fehlertext ..

        Nein, die Ausgabe ist dann:
        <br>Not Found

        allerdings gerät das Programm in eine Schleife bis ich es schließlich abbreche!
        Im Log stehen entsprechend viele Zeilen, dass die Datei nicht gefunden wurde.
        Im Windows (XP) Taskmanager ist der Prozess perl.exe entsprechend oft aufgeführt.
        Woran kann dies liegen?

        Kann ich nicht nachvollziehen, ich hab deinen Code 1:1 kopiert und erhalte dei obige Ausgabe

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Hallo,

          Kann ich nicht nachvollziehen, ich hab deinen Code 1:1 kopiert und erhalte dei obige Ausgabe

          Ich habe das ganze jetzt auch im Internet getestet und da läuft es tatsächlich auch!
          Es muss also an meinem lokalen Apache/XAMPP liegen.
          Ich habe festgestellt, dass die Abfrage
             if ($response->is_success) {....}
          dort immer true (1) liefert, egal ob die Datei vorhanden ist oder nicht.
          Hat vielleicht jemand eine Idee woran das liegen kann?

  2. use LWP::Simple;
    getprint("$URL/up.inc");

    Die Funktion setzt ein gewisses Verständnis von Perl und HTTP voraus, von dem dir noch ein bisschen zu fehlen scheint. Setze deshalb besser LWP::UserAgent ein.

    Jetzt möchte ich unterschiedliche up.inc verwenden.
    Wenn es in der $URL nicht vorhanden ist, soll es von $URL1 gelesen werden.
    Wie kann ich das realisieren?

    Bitte werde dir zuerst bewusst, dass getprint *nie* einen Fehler im Perl'schen Sinne wirft. Das Verhalten habe ich mal beschrieben, nachzulesen im Archiv (inkl. Lösungsvorschlag):
    http://forum.de.selfhtml.org/archiv/2007/1/t145106/#m941694

    Du siehst, dass du immer einen HTTP-Statuscode erhältst, den du zwar prüfen kannt, dessen Ausgabe aber stets trotzdem automatisch erfolgt (deswegen heißt die Funktion ja auch get*print*).

    Bitte erwartet von mir keine großen Perl-Kenntnisse und schon gar keine Englisch-Kenntnisse (sodass ich die engl. Perl-Dokumentation lesen könnte).

    Eine deutsche Quelle gibt's hier:
    http://www.thomas-fahle.de/pub/perl/LWP/HTTP/HTTP_Get.html

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.