Perl

Hallo,

da hab ich nun die Aufgabe bekommen ein Perl-Script zu schreiben, das bei der Benutzeranmeldung gestratet wird, wo ich doch null Plan davon habe.
Egal, den ersten Teil hab ich erfolgreich hinbekommen. Ich brauch nur noch 'nen Tip wie ich folgende Probleme(?) löse:

  1. es soll am Anfang überprüft werden ob eine bestimmte Datei schon existiert. Wenn diese existiert, dann soll das Script abbrechen, wenn diese nicht existiert, dann soll es fortfahren.

  2. Die vom User eingegebenen Daten sollen in eine neu erstellte Datei geschrieben werden und diese sollte abgespeichert werden.

Wie stell ich das am dümmsten an.
Vielen Dank für eure Hilfe.

Gruß
Martin

Hallo Martin,

dummerweise habe ich selber schon fast alles wieder über Perl vergessen, aber wozu gibt es Bücher:

zu 1:
1 $file = „bestimmte Datei“;
2 if (-e $file) {
print „Die Datei $file existiert bereits“;
exit;
}

1: der Dateiname wird in die Variable $file eingetragen
2: das Programm bricht ab, wenn diese Datei bereits existiert

zu 2:
1 $newfile = „Pfad + Dateiname“;
2 open (Filehandle, > $newfile) || die „Can’t open newfile: $!\n“;
3 print „Aufforderung zur Eingabe“;
4 print Filehandle ;
5 close Filehandle;

Eklärungen zu den Zeilen:
1: Setzt die Variable newfile
2: Öffnet die Datei aus der Variablen newfile zum Schreiben. Wenn die Datei bereits existiert wird sie überschrieben. Um Daten in der Datei anzuhängen, musst du statt „>“ „>>“ (ohne Anführungszeichen) benutzen. Falls das Öffnen der Datei nicht funktioniert wird eine Fehlermeldung ausgegeben.
3: Text zur Aufforderung der Eingabe
4: Die Eingabe wird in die Datei geschrieben
5: Abschluss

Du kannst die Schritte 3 und 4 bleiebig oft wiederholen, um mehrere Eingaben vom User zu fordern.
Ich habe den Code nicht getestet. Es kann also sein das trotzdem irgend etwas schiefgeht. Ich hoffe, dass es dir trotzdem weiterhilft.

Viel Spaß noch,

Gregor

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gregor,

dankeschön, es klappt fast.

[snip]

zu 1:
1 $file = „bestimmte Datei“;
2 if (-e $file) {
print „Die Datei $file existiert
bereits“;
exit;
}

[snip]

Das funktioniert wunderbar.

zu 2:
1 $newfile = „Pfad + Dateiname“;
2 open (Filehandle, > $newfile) || die
„Can’t open newfile: $!\n“;
3 print „Aufforderung zur Eingabe“;
4 print Filehandle ;
5 close Filehandle;

Kann ich die Eingaben von User auch vor diesem Programmteil machen lassen und dann Zeile 3 rausnehmen und in Zeile 4 etwas in der Art:

print Filehandle "poll $mails protocol POP3 user $post password $passwd is $user"; 

schreiben? Ich hab mir gedacht das sollte klappen…tut es aber leider nicht, denn es erscheint folgende Meldung:

Argument „/home/martin/.fetchmailrc“ isn’t numeric in gt at test.pl line 33, chunk 4.
Argument „Filehandle“ isn’t numeric in gt at test.pl line 33, chunk 4.
Use of uninitialized value at test.pl line 33, chunk 4.
print on closed filehandle main::Filehandle at test.pl line 34, chunk 4.

Wo liegt denn da der Fehler? Der Code and er Stelle sieht folgendermaßen aus:

$newfile="/home/$user/.fetchmailrc";
open (Filehandle \> $newfile);
print Filehandle "poll $mails protocol POP3 user $post password $passwd is $user";
close Filehandle;

Grummel, ich glaube, ich sollte mich mal ein bisschen mehr damit beschäftigen…

Gruß
Martin

Es klappt

$newfile="/home/$user/.fetchmailrc";
open (Filehandle > $newfile);
print Filehandle „poll $mails protocol
POP3 user $post password $passwd is
$user“;
close Filehandle;

Fehler gefunden und korrigiert.
So hat es auszusehen:

$newfile="/home/$user/.fetchmailrc";
open (Filehandle, „>$newfile“);
print Filehandle „poll $mails protocol
POP3 user $post password $passwd is
$user“;
close(Filehandle);

Danke für deine Hilfe, die mich auf den richtigen weg geführt hat.

Gruß
Martin