PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einsteigerseminar PERL source-code fehler ???



djrom
14.01.2001, 09:04
ich hab mir das einsteigerseminar perl geholt und brav die source-codes abgetippt mit dem ergebnis eine reihe von fehlermeldungen von active perl ausgespuckt zu bekommen !!! kan es sein dass die quelltexte falsch sind?? die bei denen ich probleme hatte poste ich mal hier...

#!/usr/bin/PERL
#
#datum ändern
#
$cnt = 0;
print "In welchem Verzeichnis liegen die HTML-Dateien?\n";
$verz = <STDIN>;
chop $verz;
print "Welches Datum soll eingefügt werden (TT.MM.JJJJ)?\n";
$datum = <STDIN>;
chop $datum;
if (not ((-e $verz) or (-d $verz)))
{
die ("Das Verzeichnis kann nicht gefunden werden.\n");
}
opendir (VERZ, "$verz");
@verzeichnisinhalt = readdir VERZ;
closedir (VERZ);
foreach $einedatei (@verzeichnisinhalt)
{
if ($einedatei =~ m/\.htm?$/io)
{
open (EINGABE, ">$verz$einedatei");
@dateininhalt = <EINGABE>;
close (EINGABE);
open (AUSGABE, ">$erz$einedatei");
foreach $zeile (@dateiinhalt)
{
if ($zeile = ~m/erung\:\d\d\.\d\d.\d\d\d\d\/o)
{
$updating[$cnt++] = $einedatei;
$zeile =~ s/\d{2}\.\d{4}/$datum/i;
}
print AUSGABE ("$zeile");
}
close (AUSGABE);
else
{
print "$einedatei" ist keine HTML Datei\n";
}
}
print "Folgende Dateien wurden aktualisiert:\n";
foreach $zeile (@updating)
{
print "$zeile\n";
}

ComTK
14.01.2001, 10:30
Hi,
also entweder es sind wirklich Fehler im Buch, oder du hast einfach unsauber abgetippt. Ich schreib einfach mal was alles falsch war...
Also:
Im 2. Source:
Zeile 0 muss lauten: #!/usr/bin/perl
Zeile 12 muss lauten: close (EINGABE); (haste das ";" vergessen)
Im 3. Source:
Zeile 0 muss lauten: #!/usr/bin/perl
Zeile 14 muss lauten: chop $datei; (haste auch wieder das ";" vergessen)
Da im 1. Source sehr viele Fehler waren, poste ich den verbesserten Source mal komplett :D (da bist du am Ende ein wenig mit den if-schleifen durcheinanger gekommen) :

#!/usr/bin/perl
#
#datum ändern
#
$cnt = 0;
print "In welchem Verzeichnis liegen die HTML-Dateien?\n";
$verz = <STDIN>;
chop $verz;
print "Welches Datum soll eingefügt werden (TT.MM.JJJJ)?\n";
$datum = <STDIN>;
chop $datum;
if (not ((-e $verz) or (-d $verz)))
{
die ("Das Verzeichnis kann nicht gefunden werden.\n");
}
opendir (VERZ, "$verz");
@verzeichnisinhalt = readdir VERZ;
closedir (VERZ);
foreach $einedatei (@verzeichnisinhalt)
{
if ($einedatei =~ m/\.htm?$/io)
{
open (EINGABE, ">$verz$einedatei");
@dateininhalt = <EINGABE>;
close (EINGABE);
open (AUSGABE, ">$erz$einedatei");
foreach $zeile (@dateiinhalt)
{
if ($zeile = ~m/erung\:\d\d\.\d\d.\d\d\d\d/o)
{
$updating[$cnt++] = $einedatei;
$zeile =~ s/\d{2}\.\d{4}/$datum/i;
print AUSGABE ("$zeile");
close (AUSGABE);
}
}
}
else
{
print "$einedatei ist keine HTML Datei\n";
}
}
print "Folgende Dateien wurden aktualisiert:\n";
foreach $zeile (@updating)
{
print "$zeile\n";
}

djrom
14.01.2001, 12:19
naja also das mit den ";" war 100% ich (es war auch spät vorgestern oder wann das war ;) ) bei 3. vergleiche ich grad zeile für zeile ;) das kann nochn bisschen dauern :)
sorry aber ich kann da keine änderungen finden ! kannst du nicht mit zeile und so sagen
<-- fand echt nix! :(
sorry wegen dem aufwand aber auf jeden fall mal THX !

ComTK
14.01.2001, 12:47
Hi,
also die hauptfehler lagen in diesem Stück code (erstmal deine version):
[b]

djrom
15.01.2001, 17:01
hi schon wieder danke jetzt hab ich das auf jeden fall geändert und er findet nurnoch in zeile:
44 (near "print" could be starting @ line 41)
dann nochmal 44 "print folgende"
und 47 Fehler.
ich stell jetzt nochmal meinen jetzigen code hier rein oder jedenfalls das ende ich hab echt keinen schimmer was jetzt noch falsch sein könnte! CODE:


(zeile27) foreach $zeile (@dateiinhalt)
{
if ($zeile = ~m/erung\:\d\d\.\d\d.\d\d\d\d/o)
{
$updating[$cnt++] = $einedatei;
$zeile =~ s/\d{2}\.\d{4}/$datum/i;
print AUSGABE ("$zeile");
close (AUSGABE);
}
}
}

else
{
print "$einedatei ist keine HTML Datei\n";
}
}
print "Folgende Dateien wurden aktualisiert:\n";
foreach $zeile (@updating)
{
print "$zeile\n";
}