Thread Kommaseparierte Listen bereichsweise ausgeben. (28 answers)
Opened by Gast at 2006-04-14 16:54

murphy
 2006-04-15 04:49
#64962 #64962
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Prinzipiell sieht das Programm ganz gut aus. Aber ein paar Anmerkungen hätte ich da noch:

- Die while-Schleife über das Handle funktioniert nicht, weil der Befehl
Code: (dl )
$_=shift(@_);
sinnlos ist und auf das in diesem Kontext leere @_ zugreift. Die while-Schleife initialisiert dir $_ bereits automatisch bei jedem Durchlauf mit der eingelesenen Zeile aus FILE.

- Wenn du die Lösung wählst, bei der die Liste gleich komplett eingelesen wird, dann kannst du die Eingabedatei auch nach der Zuweisung wieder schließen. Es ist generell eine sinnvolle Sache, den Geltungsbereich aller Datenobjekte möglichst klein zu halten, das minimiert Fehlerquellen.

- Du solltest die Datei besser mit Fehlerüberprüfung öffnen, also zum Beispiel so:
Code: (dl )
open LISTE, "list.txt" or die "Fehler beim Öffnen der Eingabedatei: $!\n";
Allerdings wäre es meiner Meinung nach noch schöner, das Einlesen so zu schreiben:
Code: (dl )
1
2
3
4
5
my @lines;
{
 open my $in, '<', 'list.txt' or die "Fehler beim Öffnen der Eingabedatei: $!\n";
 @lines = <$in>;
}

Das verschmutzt nicht den globalen Namensraum mit einem Filehandle LISTE, schließt die Datei automatisch am Ende des geschweift geklammerten Blockes und es ist -- im Hinblick darauf, dass man den Dateinamen vielleicht mal aus einer Variablen nehmen will -- sicherer als deine Variante durch die explizite Angabe des Dateizugriffsmodus '<' (nur lesen) in einem eigenen Parameter.

- Der reguläre Ausdruck, den du verwendest um die Eingabezeilen auszuwerten, funktioniert, denke ich, nicht immer. Zum Beispiel kriegst du da Probleme, wenn eine Variable in deinen Eingabezeilen 'foo' heißt und jemand an der Kommandozeile angibt, dass nach 'o' gesucht werden soll. Dann erwischt dein regulärer Ausdruck immer auch 'foo'... Lies dir am besten mal perlrequick und/oder perlretut durch um einen Überblick über reguläre Ausdrücke zu bekommen ;-)
When C++ is your hammer, every problem looks like your thumb.

View full thread Kommaseparierte Listen bereichsweise ausgeben.