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

toby
 2006-04-15 06:59
#64967 #64967
User since
2006-04-14
66 Artikel
BenutzerIn
[default_avatar]
Hallo, noch mal ich ;-)

mehrere Antwortende sagten hier, dass ich das Filehandle sofort, also noch for dem while() schliessen soll. Wie soll dann aber daraus gelesen werden, wenn es geschlossen ist? Ich habe es natürlich ausprobiert und tatsächlich, wenn ich for dem while() das Filehandle close, bekome ich aber folgendes:

Quote
readline() on closed filehandle LISTE at ./liste.pl line 14.

der code:

open FH, "list.txt";
close(FH);
while(<FH>){
print;
}


Sieht also aus und ist für mich logisch, dass man doch erst nach der Operation close'n kann, oder galt das für den Fall, wenn man ein Array gefüllt hat ( also FH öffnen, @liste füllen, FH closen, while(@liste)), dann muss ich aber wieder mit $_=shift(@liste) innerhalb von while() arbeiten und das wurde ja von Euch auch abgeraten, weil man besser mit dem Filehandler arbeiten soll... hmm... ? :confused:

Noch eine Frage:

@murphy: Du empfehlst das Einlesen der Datei (list.txt) folgendermassen:

Code: (dl )
1
2
3
4
5
my @lines;
{
open my $in, '<', 'list.txt' or die "Fehler beim Öffnen der Eingabedatei: $!\n";
@lines = <$in>;
}


sid burn erwähnte aber, dass dieses "auf einmal in ein Array Einlesen", bei grösseren Dateien nicht gut wäre. Es leuchtet mir ein, dass wie Du sagtest, mit meiner Variante "der globale Namensraum mit einem Filehandle verschmutzt wird", allerdings scheint mir das Argument das Problems mit dem "auf einmal Einlesen in ein Array" grösser, als der Vorteil des Sauberhaltens des globalen Namensraums, oder habe ich es hier wieder falsch verstanden?

Lieben Gruß :-)
Tobias\n\n

<!--EDIT|toby|1145070260-->

View full thread Kommaseparierte Listen bereichsweise ausgeben.