Umleitung STDIN in Variable geht nicht

Umleitung STDIN in Variable geht nicht

am 14.07.2006 11:25:22 von Frank Kulow

Hallo Perler,

wo ist der Fehler oder gehts nicht

------
#a.pl
use strict;
my$a;

##1 Umleitung STDOUT in Variable geht nicht
open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
open(STDOUT,'>',\$a);

print "t1";#druckt auf den Bildschirm

close STDOUT;
open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";

open(AA,">a.tmp");
print AA $a;
close AA; #a.tmp ist leer

print "\nEnde t1\n";


##2 Umleitung STDOUT in anderes Filehandle geht
open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
open(STDOUT,'>',"b.tmp");

print "t2";

close STDOUT;#b.tmp enthält t2
open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";
print "\nEnde t2\n";

##3 Nutzung einer Variable als Filehandle geht
open(OUT,'>',\$a);

print OUT "t3";

close OUT;

open(AA,">c.tmp");
print AA $a;
close AA;#c.tmp enthält t3
print "\nEnde t3\n";


--------------
Ausgabe:
-------------
$ perl a.pl

t1
Ende t1

Ende t2

Ende t3


$ cat a.tmp

$ cat b.tmp
t2
$ cat c.tmp
t3
$

------
Frank

Re: Umleitung STDIN in Variable geht nicht

am 14.07.2006 11:56:36 von Wolf Behrenhoff

Frank Kulow schrieb:
> Hallo Perler,
>
> wo ist der Fehler oder gehts nicht
>
> ##1 Umleitung STDOUT in Variable geht nicht
> open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
> open(STDOUT,'>',\$a);
>
> print "t1";#druckt auf den Bildschirm

Du hast in der Doku (perldoc -f open) folgendes übersehen:

| Though if you try to re-open "STDOUT" or "STDERR" as an "in
| memory" file, you have to close it first:
|
| close STDOUT;
| open STDOUT, '>', \$variable or die "Can't open STDOUT: $!";

Wolf