Inhalt aus Verzeichnis in Datei schreiben
Alltimefriend
- perl
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
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
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
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(.....)'
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