in reply to Re: Output to STDOUT and print last line to console
in thread Output to STDOUT and print last line to console
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.
|
|---|