Thread Ausgabe von PDF::Create in Variable (7 answers)
Opened by bianca at 2009-12-26 17:10

bianca
 2009-12-27 09:27
#129728 #129728
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
2009-12-26T18:07:34 havi

Danke für den Tipp. Hab jetzt mal ne Stunde gegoogelt aber kein einziges Beispiel gefunden, wo STDOUT mit open2 oder open3 umgeleitet wird.
Stattdessen hab ich aber auf perldoc.perl.org etwa in der Mitte das hier gefunden:

Quote
Since v5.8.0, perl has built using PerlIO by default. Unless you've changed this (i.e. Configure -Uuseperlio), you can open file handles to "in memory" files held in Perl scalars via:

1. open($fh, '>', \$variable) || ..
Though if you try to re-open STDOUT or STDERR as an "in memory" file, you have to close it first:

1. close STDOUT;
2. open STDOUT, '>', \$variable or die "Can't open STDOUT: $!";


Das bestärkt mich in der Annahme, dass es mit dem einfachen open() machbar sein müsste.

Hab es mal vereinfacht in ein separates Testscript gepackt wie folgt:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w
use strict;
use diagnostics;
use warnings;

my $output;
open my $oldout, ">&STDOUT"     or die "Can't dup STDOUT: $!";
#open STDOUT, '>', "foo.out" or die "Can't redirect STDOUT: $!";
open STDOUT, '>',\$output or die "Can't redirect STDOUT: $!";

print "stdout 1\n";
open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";
print "stdout 2\n";
print "\$output = \'$output\'\n";


Die Variante open STDOUT, '>', "foo.out" klappt ausgezeichnet. Bei der jetzt aktivierten Variante open STDOUT, '>',\$output bekomme ich folgende Ausgabe:

Code: (dl )
1
2
3
Uncaught exception from user code:
Can't redirect STDOUT: Bad file descriptor at stdout.pl line 9.
at stdout.pl line 9


Mein Perl:
Code: (dl )
1
2
3
4
5
6
7
8
This is perl, v5.8.7 built for MSWin32-x86-multi-thread
(with 7 registered patches, see perl -V for more detail)

Copyright 1987-2005, Larry Wall

Binary build 813 [148120] provided by ActiveState http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Jun 6 2005 13:36:37


Liegt das jetzt ein meinem Perl, dass ein open() in eine Variable scheitert oder ist die o.a. Doku falsch?

Bitte nochmal um Hilfe.

EDIT: Zitat vervollständigt
Last edited: 2009-12-27 09:32:35 +0100 (CET)
10 print "Hallo"
20 goto 10

View full thread Ausgabe von PDF::Create in Variable