PerlIO::tee provides a multiplex output stream like tee(1).
It makes a filehandle write to one or more files (or
scalars via the :scalar layer) at the same time.
You can use push_layer() (defined in PerlIO::Util) to add a source
to a filehandle. The source may be a file name, a scalar reference, or a
filehandle. For example:
$fh->push_layer(tee => $file); # meaning "> $file"
$fh->push_layer(tee => ">>$file");# append mode
$fh->push_layer(tee => \$scalar); # via :scalar
$fh->push_layer(tee => \*OUT); # shallow copy, not duplication
You can also use open() with multiple arguments.
However, it is just a syntax sugar to call push_layer(): One :tee
layer has a single extra output stream, so arguments $x, $y, $z of open(),
for example, prepares a filehandle with one default layer and two :tee
layers with a internal output stream.
open my $tee, >:tee, $x, $y, $z;
# the code above means:
# open my $tee, >, $x;
# $tee->push_layer(tee => $y);
# $tee->push_layer(tee => $z);
$tee->get_layers(); # => "perlio", "tee($y)", "tee($z)"
$tee->pop_layer(); # "tee($z)" is popped
$tee->pop_layer(); # "tee($y)" is popped
# now $tee is a filehandle only to $x