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.