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 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/