NAME
    Hook::Output::File - Redirect STDOUT/STDERR to a file

SYNOPSIS
     use Hook::Output::File;

     {
         my $hook = Hook::Output::File->redirect(
             stdout => '/tmp/1.out',
             stderr => '/tmp/2.out',
         );

         saved();

         undef $hook; # restore previous state of streams

         not_saved();
     }

     sub saved {
         print STDOUT "..."; # STDOUT output is appended to file
         print STDERR "..."; # STDERR output is appended to file
     }

     sub not_saved {
         print STDOUT "..."; # STDOUT output goes to STDOUT (not to file)
         print STDERR "..."; # STDERR output goes to STDERR (not to file)
     }

DESCRIPTION
    `Hook::Output::File' redirects `STDOUT/STDERR' to a file.

METHODS
  redirect
     my $hook = Hook::Output::File->redirect(
         stdout => $stdout_file,
         # and/or
         stderr => $stderr_file,
     );

    Installs a file-redirection hook for regular output streams (i.e.,
    `STDOUT/STDERR') with lexical scope.

    A word of caution: do not intermix the file paths for `STDOUT/STDERR'
    output or you will eventually receive unexpected results. The paths may
    be relative or absolute; if no valid path is provided, an usage help
    will be printed (because otherwise, the `open()' call might silently
    fail to satisfy expectations).

    The hook may be uninstalled either explicitly or implicitly; doing it
    the explicit way requires to unset the hook variable (more concisely, it
    is a blessed object), whereas the implicit end of the hook will
    automatically be triggered when leaving the scope the hook was defined
    in.

     {
         my $hook = Hook::Output::File->redirect(
             stdout => '/tmp/1.out',
             stderr => '/tmp/2.out',
         );

         some_sub();

         undef $hook; # explicitly remove hook

         another_sub();
     }
     ... # hook implicitly removed

BUGS & CAVEATS
    Does not work in a forked environment, such as the case with daemons.

SEE ALSO
    perltie

AUTHOR
    Steven Schubiger <schubiger@cpan.org>

LICENSE
    This program is free software; you may redistribute it and/or modify it
    under the same terms as Perl itself.

    See http://dev.perl.org/licenses/

