Самый простой способ без особых помех для остального кода - использовать связанные файловые дескрипторы. Связанные файловые дескрипторы позволяют вам писать настраиваемые функции, которые вызываются, когда ваш файловый дескриптор читается, записывается или выполняет какие-либо другие операции с ним.
Подтверждение концепции
package TimeStamper;
sub TIEHANDLE {
my ($pkg,$file) = @_;
open my $fh, ">", $file; # the "real" filehandle
return bless [$fh],$pkg;
}
sub PRINT {
my ($self,@msg) = @_;
print {$self->[0]} "[",scalar localtime,"] ",@msg;
}
package main;
my $stderr = "/home/logs/stderr.log.txt";
tie *STDERR, "TimeStamper", $stderr;
print STDERR "Hello world\n";