so how does one redirect both STDERR and STDOUT to $file, do some stuff, and
then get stderr and stdout back and playing nice?

I'm trying:

        # if $LogLogfile="YES"
        if ( $LogLogfile eq "YES" ) {
        print "Logging stuff to log file...\n";
        # redirect stderr --> stdout.
        open(STDERRBACKUP, ">&STDERR");
        open(STDERR, ">&STDOUT") or die "Problem redirecting STDERR.";
        # redirect stdout to file
        open(STDOUTBACKUP, ">&STDOUT");
        open(STDOUT, ">$PathLog") or die "Problem redirecting STDOUT.";
        # execute the boatload of stuff we have to...
        print "\n";
        print $CommandLineString ;
        print "\n";
        system ( $CommandLineString ) ;
        print
"###########################################################################
##\n";
        SetThingsRight();
        # get stdout back
        close (STDOUT);
        open (STDOUT, ">&STDOUTBACKUP");
        # get stderr back from stdout.
        close (STDERR);
        open(STDERR, ">&STDERRBACKUP");
        }

which is probably unnecessarily messy and plumb doesn't work. it's giving:

Logging stuff to log file...
Uncaught exception from user code:
        Problem redirecting STDOUT. at ./hierarchicalcommandlinetester.pl
line 119.

---

From: Brian [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, July 17, 2001 11:31 AM
To: [EMAIL PROTECTED]
Subject: RE: Redirection of STDERR


If you need it restored within the sub itself, you can also throw
scoping brackets around it.  i.e. do what Paul suggested, only:

Sub func {
  # Some code here
  {
    open STDERR, ">$file" or die $!;
    # Code for the new STDERR here
  }
  # STDERR is back to normal here
  # More code
}

Remember, scoping brackets are you friend.  :o)

Brian Johnson
Partner/Systems Administrator/Programmer
Source1Hosting.tv, LLC (www.source1hosting.tv)
Source1Results.com, LLC (www.source1results.com)
I may be insane, but remember - The only
difference between an insane man and a
genius is his jacket.

>
> --- Roland Schoenbaechler <[EMAIL PROTECTED]> wrote:
> > In a sub of my script I redirected STDERR in a file. How can I
> > redirect the STDERR back to the default (screen) for the following
> > subs?
>
> Use local(). It's not something to make a big habit of, but this is a
> good place for it.
>
>  sub func {
>     local *STDERR;
>     open STDERR, ">$file" or die $!;
>     # code here
>  }  # STDERR gets "fixed" when the local() scope ends here
>
> c.f. perldoc -f local
>
> __________________________________________________
> Do You Yahoo!?
> Get personalized email addresses from Yahoo! Mail
> http://personal.mail.yahoo.com/
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>


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



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

Reply via email to