Alltimefriend: Inhalt aus Verzeichnis in Datei schreiben

Hallo Leute!

Nun, ich habe ein Verzeichnis mit hunderten von Files, aus denen ich eine HTML-Linkliste machen sollte.
Da das händisch nur schwer machbar ist, möchte ich es mit einem Perl-Script lösen.

Ich hatte 2 Scripts die ich zusammenfassen wollte. Das erste liest mir das Verzeichnis ein und gibt sie normal aus (am Bildschirm). Das zweite schreibt in eine Datei.

Daraus ist das geworden:

#!/usr/bin/perl

use strict;

open(OUTFILE, ">test.html") or
              die " Datei test.html  konnte nicht geoeffnet werden:
$!\n";

$ordnername = "/home/jan/ATF-HP";
opendir(DIR, $ordnername);
@eintraege = readdir(DIR);

foreach(@eintraege) {
        print OUTFILE $_;

}
closedir(DIR);
close OUTFILE;#!/usr/bin/perl

Nun erhalte ich immer folgende Fehlermeldung:

Global symbol "$ordnername" requires explicit package name at ordner.pl line 8.
Global symbol "$ordnername" requires explicit package name at ordner.pl line 9.
Global symbol "@eintraege" requires explicit package name at ordner.pl line 10.
Global symbol "@eintraege" requires explicit package name at ordner.pl line 13.

Weiß jemand hier Rat?

Gruß, Jan aka Alltimefriend

  1. close OUTFILE;#!/usr/bin/perl

    -----------------^^^^^^^^^^^^^^^----------

    Sorry, das gehört da nicht hin, hatte das Script aus Versehen 2x eingefügt und das nicht mehr weggelöscht.

    Gruß, Jan

  2. MoiN!

    Nun erhalte ich immer folgende Fehlermeldung:

    Global symbol "$ordnername" requires explicit package name at ordner.pl line 8.
    Global symbol "$ordnername" requires explicit package name at ordner.pl line 9.
    Global symbol "@eintraege" requires explicit package name at ordner.pl line 10.
    Global symbol "@eintraege" requires explicit package name at ordner.pl line 13.

    Weiß jemand hier Rat?

    Da du "use strict" benutzt, mußt du deine Variablen vor der Benutzung mit "my variable" deklarieren, sonst meckert Perl. Würde ich jedenfalls erstmal sagen, bin da kein Experte. :)

    - Sven Rautenberg

  3. Hallo,

    Daraus ist das geworden:

    #!/usr/bin/perl
    use strict;

    Du wießt, warum das hier steht?

    open(OUTFILE, ">test.html") or
                  die " Datei test.html  konnte nicht geoeffnet werden:
    $!\n";
    $ordnername = "/home/jan/ATF-HP";
    opendir(DIR, $ordnername);
    @eintraege = readdir(DIR);
    foreach(@eintraege) {
            print OUTFILE $_;
    }

    Dir ist hoffentlich klar, daß da die Dateinamen (und nur die, also ohne dem Pfad) quasi in einer Wurst in der Datei landen. Aber Du willst wahrscheinlich irgendwann sowieso eine HTML-Formatierung einfügen, also nicht mehr weiter lamentiert

    closedir(DIR);
    close OUTFILE;#!/usr/bin/perl

    Nun erhalte ich immer folgende Fehlermeldung:

    Global symbol "$ordnername" requires explicit package name at ordner.pl line 8.
    Global symbol "$ordnername" requires explicit package name at ordner.pl line 9.
    Global symbol "@eintraege" requires explicit package name at ordner.pl line 10.
    Global symbol "@eintraege" requires explicit package name at ordner.pl line 13.

    Das hängt mit 'use strict;' zusammen. Du solltest, wenn Du diese Anweisung verwendest, auch gefälligst jede Variable deklarieren, also
    my($ordnername) = '/home/wo/auch/immer';
    my(@eintraege) = readdir(DIR);

    usw. Das zauber wort heißt my. Jede Variable, die Du neu einführst, sollte mit 'my' deklariert werden [1]. Aber lass bitte nicht 'use strict' weg, obwohl das auch die Fehlermeldungen beseitigen würde. Gewöhn Dir lieber das ordentliche Deklarieren an. Mit ein wichtiger Grund ist, daß es auf Dauer leichter ist, Schreibfehler bei Variablennamen zu finden.

    'Literaturhinweise':
    perldoc -f my
    perldoc -f our
    perldoc perlmodlib

    Grüße
      Klaus

    [1] der Vollständigkeit halber sollte auch noch erwähnt werden daß es da auch noch 'our' gibt und auch 'use vars qw(.....)'

    1. Hi!

      open(OUTFILE, ">test.html") or
                    die " Datei test.html  konnte nicht geoeffnet werden:
      $!\n";
      $ordnername = "/home/jan/ATF-HP";
      opendir(DIR, $ordnername);
      @eintraege = readdir(DIR);
      foreach(@eintraege) {
              print OUTFILE $_;
      }

      Dir ist hoffentlich klar, daß da die Dateinamen (und nur die, also ohne dem Pfad) quasi in einer Wurst in der Datei landen. Aber Du willst wahrscheinlich irgendwann sowieso eine HTML-Formatierung einfügen, also nicht mehr weiter lamentiert

      Ja, das ist mir schon klar. Ich wollte erst nur mal die Funktion an sich testen :o)

      usw. Das zauber wort heißt my. Jede Variable, die Du neu einführst, sollte mit 'my' deklariert werden [1]. Aber lass bitte nicht 'use strict' weg, obwohl das auch die Fehlermeldungen beseitigen würde. Gewöhn Dir lieber das ordentliche Deklarieren an. Mit ein wichtiger Grund ist, daß es auf Dauer leichter ist, Schreibfehler bei Variablennamen zu finden.

      Genau das ist es, danke! Jetzt funktioniert es genauso, wie ich es will *freu*

      Gruß, Jan