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/