См. Раздел «13.15.9. Пример связи: файловые дескрипторы с несколькими приемниками» в поваренной книге Perl.
Главное знать это tie *TEE, "Tie::Tee", @handles;
ПРИМЕЧАНИЕ: пакет Tie :: Tee - это то, что вам нужно создать самостоятельно, код находится в том же разделе книги.
ПРИМЕЧАНИЕ: затем вы можете сделать select(TEE)
, и он будет использоваться в каждом регулярном print
выражении, поэтому вам не нужно делать print TEE xxx
.
ПРИМЕЧАНИЕ. Чтобы любой вывод STDERRy (включая die) перешел на тот же файловый дескриптор, измените STDERR на TEE следующим образом:
use Tie::Tee;
use Symbol;
@handles = (*STDOUT);
push(@handles, $handle = gensym( ));
open($handle, ">/tmp/teetest.xxx");
tie *TEE, "Tie::Tee", @handles;
select(TEE);
*STDERR = *TEE;
print "raw print\n";
die "XXXX\n";
Вывод будет:
raw print
XXXX
И содержимое файла будет:
raw print
XXXX