From: "Scott, Joshua" <[EMAIL PROTECTED]>
> Let me add a little more info regarding my question.  The subroutines
> are already setup and can't be modified easily.  The basic task of all
> the different subs is to print to STDOUT.  I'd really like to be able
> to call this sub from another script and somehow redirect the output
> to a file without modifying the subs code.  

Most probably they do NOT write to STDOUT, but to the currently 
selected filehandle. That is they contain
        print "Something\n";
and not
        print STDOUT "Something\n";

In this case all you have to do is to select() a different 
filehandle.

        open OUT, '> '.$filename or die "Can't open $filename : $!\n";
        {
                my $oldfh = select(OUT);
                call_the_procedure(params);
                select($oldfh);
        }
        close OUT;

See
        perldoc -f select

If the functions really write to STDOUT you may either:

        {
                local *STDOUT; # the "redirection" is only local
                open STDOUT, '> '.$filename or die "Can't open $filename : $!\n";
                call_the_procedure(params);
                close STDOUT;
        }

or
        {
                local *OLDOUT; # to store the STDOUT
                open OLDOUT, '>&STDOUT' or die "Can't dup the STDOUT : $!\n";
                close STDOUT;
                open STDOUT, '> '.$filename or die "Can't open $filename : $!\n";
                call_the_procedure(params);
                close STDOUT;
                open STDOUT, '>&OLDOUT' or die "Can't restore the STDOUT : $!\n";
        }

The second would be necessary if the procedure executes some external 
programs that need to be able to print to the same filehandle.

In either case make sure you restore the original STDOUT and/or 
selected flehandle.

HTH, Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to