Perl Programm geht nicht

  • [font="Arial"]Guten Morgen.[/font]
    [font="Arial"]
    [/font][font="Arial"]Ich habe mich gestern zum ersten mal mit Perl beschäftigt und wollte zum Einstieg ein Programm schreiben, welchen eine bestimme Webseite abgrast und alle Bilder, die in ein bestimmtes Muster fallen herunter lädt.
    Dazu wollte ich ursprünglich, den Quelltext der Seite in eine Variable speichern, diese mit einem Regulären Ausdruck bearbeiten, sodass ich genau einen Link rausbekomme. Leider schien meine Variable über zu laufen, weshalb ich das Problem mit einer Textdatei als Zwischenspeicher lösen wollte.


    Der Code sieht wie folgt aus:


    Hier gehts zu besagtem Code. [/font]
    [font="Arial"]
    Nun gibt mir meine Console immer Use of uninitialized value in print at Bildergrabber.pl line22.


    Aus. Ansonsten macht der Spaß nichts.



    Jemand ne idee woran es liegen könnte?[/font]
    [font="Arial"]
    [/font]
    [font="Arial"]Mit freundlichen Grüßen


    Darkwater[/font]

  • Hi,


    auch wenn dieser Thread schon älter ist...


    Hast du mal probiert die Klammern im "get" command weg zu lassen?


    Alternativ könntest du den Inhalt des "get" Commands erst in eine Variable schreiben (Debugausgabe) und dan in die Datei.


    Gruß

  • Versuchs mal so :


    #!C:\Perl64\bin\perl.exe
    binmode STDOUT, ':utf8';
    use charnames ':full';
    use warnings;
    use Win32::Ole;
    use LWP::Simple;
    use strict;
    use Encode;
         
         
    my $page="";
    my $_;
    my $link="";
    my $count=0;
         
    # for(my $i=1; $i<=1000000; $i++){
    unlink ("zwso.txt") or die $!;
    $count++;
    open (DATEI, ">zwso.txt") or die $!;
    print DATEI get("http://spiegel.de");
    close (DATEI);
         
         
    open (DATEI,"<zwso.txt") || die $!;
    while (<DATEI>;){
    # print $_;
        
    #if ($_ =~ /(http.*\.jpg)/m{
    if ($_ =~/(http.*\.jpg)/m){
    # $link = ($_ =~ http.*\.png)/m;
    $link = $1;
    print "$link\n";}
    #last;
    }
         
        
    close DATEI;

  • best practiice sind lexikalische Filehandles und open mit 3 args.


    Also statt


    open (DATEI, ">zwso.txt")


    besser:


    open (my $datei, ">", "datei.txt")


    Wen die Details interssieren: David Conway: Perl Best Practices, OReilly 2005).