Hi Don. I like your idea and tried your code out a bit. You mentioned in your intro that you think there are better solutions possible; you'll probably like this one, since it doesn't require a separate process:
use strict; use warnings; use feature 'say'; use autodie qw( :all ); open my $log, '>', 'output.txt'; tie *BOTH, 'Multiplex', *STDOUT, $log; select *BOTH; say 'Sent to display and log : ', 'tested'; printf "%s should get %s\n", qw( Both this ); select *STDOUT; say 'Sent to display only'; select $log; say 'Sent to log only'; package Multiplex; use parent 'Tie::Handle'; sub TIEHANDLE { my $class = shift; bless [ @_ ], $class } sub PRINT { my ($self,@vals) = @_; print $_ @vals for @$self } sub PRINTF { my ($self,@vals) = @_; printf $_ @vals for @$self }
Just before pressing "create" here, I decided to search CPAN. Sure enough there is at least one module [Tie::FileHandle::MultiPlex] that implements almost exactly this idea. But I couldn't get it to work with my printf. I'm sure there are pitfalls with my quick hack at this too.
In reply to Re^2: Output to STDOUT and print last line to console
by Loops
in thread Output to STDOUT and print last line to console
by waytoperl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |