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