print() on unopened filehandle

print() on unopened filehandle

am 30.09.2006 14:32:54 von Gerhard Wolf

Hallo,

ich kann nicht erkennen weshalb ich diesen Fehler (Subject)
bei folgenden Zeilen kriege:

#!/usr/bin/perl -w

use strict;
use File::Find;

find(\&wanted, 'dat');

open(OUT,">dat.liste") or die $!;

sub wanted {
print OUT $File::Find::name."\n";
}

close OUT;

kann mir jemand die Augen öffenen?

Wenn ich das out in der Zeile print OUT... wegnehme wird alles korrekt
ausgegeben.

WARUM?

Re: print() on unopened filehandle

am 30.09.2006 14:58:07 von Ray Banana

Also sprach Gerhard Wolf

> ich kann nicht erkennen weshalb ich diesen Fehler (Subject)
> bei folgenden Zeilen kriege:
> #!/usr/bin/perl -w
> use strict;
> use File::Find;
> find(\&wanted, 'dat');
> open(OUT,">dat.liste") or die $!;
> sub wanted {
> print OUT $File::Find::name."\n";
> }
> close OUT;
> kann mir jemand die Augen öffenen?
> Wenn ich das out in der Zeile print OUT... wegnehme wird alles korrekt
> ausgegeben.
> WARUM?

Weil in wanted auf ein Filehandle geschrieben werden soll, das
erst eine Zeile später geöffnet wird. Das sollte aber jedem klar sein,
der auch nur minimale Programmierkenntnisse hat.

--
HUMLET, JOHAN, MC COOL:::: bringin da PFFFFFFFT BACK 2 POSENET!!!!!!!!
http://news.motzarella.org

Re: print() on unopened filehandle

am 01.10.2006 14:49:19 von Ferry Bolhar

Gerahrd Wolf:

> Wenn ich das out in der Zeile print OUT... wegnehme wird alles korrekt
> ausgegeben.

Weil dein Code durch die _erste_ Anweisung

> find(\&wanted, 'dat');

die Funktion 'wanted' aufruft und darin das 'print OUT'
durchführt, _bevor_ du mit 'open' die Ausgabedatei zum
Schreiben öffnest. Daran ändert sich auch durch die
Anordnung der Befehle in deinem Skript ('open' for 'print')
nichts.

Mach das 'open' vor dem 'find', und es wird alles wie
gewünscht funktionieren.

PS: Mit dem Debugger hättest du das auch feststellen
können und ein

print OUT $File::Find::name."\n" or die "print failed: $!\n";

hätte dir verraten, dass du versuchst, auf einen nicht
geöffneten Filehandle zu schreiben.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at