use strict;
use warnings;
use IO::Tee;
open(my $fh1,">","tee1") or die $!;
open(my $fh2,">","tee2") or die $!;
my $tee=IO::Tee->new($fh1,$fh2);
select $tee; #This makes $tee the default handle.
print "Hey!\n"; #Because of the select, you don't have to do print $tee "Hey!\n"
И да, выход работает:
> cat tee1
Hey!
> cat tee2
Hey!
Ответ 2
Файл:: Tee предоставляет необходимую функциональность.
use File::Tee qw( tee );
tee(STDOUT, '>', 'stdout.txt');
Ответ 3
Используйте слой tee PerlIO.
use PerlIO::Util;
*STDOUT->push_layer(tee => "/tmp/bar");
print "data\n";
$ perl tee_script.pl > /tmp/foo
$ cat /tmp/foo
data
$ cat /tmp/bar
data
Ответ 4
Если вы используете Unix-подобную систему, используйте утилиту tee.
$ perl -le 'print "Hello, world"' | tee /tmp/foo /tmp/bar
Hello, world
$ cat /tmp/foo /tmp/bar
Hello, world
Hello, world
Чтобы настроить это дублирование внутри вашей программы, настройте канал из вашего STDOUT на внешний процесс tee. Передача "|-" в open делает это легко.
#! /usr/bin/env perl
use strict;
use warnings;
my @copies = qw( /tmp/foo /tmp/bar );
open STDOUT, "|-", "tee", @copies or die "$0: tee failed: $!";
print "Hello, world!\n";
close STDOUT or warn "$0: close: $!";