FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Allgemeines

Perl und foreach

Perl und foreach 2003-04-05 14:51
Popcorn
Hmpf. Irgendwo muckt der bei mir rum und ich sehe einfach nicht wieso:

@filelist = (); # Termin-Datenbank laden open(DATABASE, "<databaset.dat") || die &error; while(<DATABASE>) { push(@filelist,$_); } close(DATABASE); # Newsfiles einzeln öffnen foreach $tfile (@filelist) { ($eintrag,$datum) = split(/\|/,$tfile); # Lade das Terminfile if($eintrag ne "") { @Termine = (); $afile = "termin$eintrag".".dat"; open(NEWSFILE, "<$afile") || die &error; An dieser Stelle bricht er mit folgenden Werten ab:

$eintrag:
$datum:
$tfile:
$filelist[0]: 324195103|19800412
$filelist[1]: 514295103|19800214


Na ja. Er kann halt das File nicht öffnen. Komisch finde ich aber, dass das Filelist-Array gefüllt ist, aber foreach offensichtlich nichts ins $tfile reinpackt. Und das verstehe ich einfach nicht. Hat da jemand mit mehr Ahnung einen Plan? Bin Perl-Frischling.




Re: Perl und foreach 2003-04-05 15:08
Popcorn
*gna* Hat sich erledigt. Blöde Zeilenumbruchssonderzeichen… Immer wieder…

Re: Perl und foreach 2003-04-06 13:31
M
Meist hilft
use warnings; use strict;

Re: Perl und foreach 2003-04-06 15:53
Popcorn
Benutze dafür immer

BEGIN {
$| = 1;
open (STDERR, ">&STDOUT");
print qq~Content-type: text/html\n\n~;
}

Aber das hilft auch nichts, wenn das Programm syntaktisch korrekt ist. Hatte halt eine leere Zeile eingelesen und einen dementsprechenden Dateinamen generiert.

Re: Perl und foreach 2003-04-06 23:59
M
Wenn man Ärger mit vermeintlich "leeren" Zeilen vermeiden will, hilft die Funktion chomp.
Es sei denn, man hat verschiedene Zeilenendezeichen in einer Datei. Dann muß man sich da was Eigenes basteln, wie z.B:
sub chopAll { my $in = $_[img]http://images.rapidforum.com/images/i0.gif[/img]; while ($in and ord(substr($in, -1, 1)) < 32 ) { chop($in); } return $in; } Wenn etwas plattformunabhängig laufen soll, ist es fast immer sinnvoll, die Zeilenendezeichen gleich beim Einlesen abzutrennen und erst beim Schreiben einer Zeile wieder anzuhängen.