use v5.8.0; use strict; use warnings; package PerlIO::via::TimeStamp; sub PUSHED { my ($class, $mode, $fh) = @_; # We can't be the bottom layer. if (@_ < 3) { # XXX Set "$!"? return -1; } # We only support writting. if ($mode ne 'w' && $mode ne 'a') { # XXX Set "$!"? return -1; } return bless({ nl => 1 }, $class); } sub WRITE { my $self = $_[0]; our $ibuf; local *ibuf = \$_[1]; my $fh = $_[2]; return 0 if not length $ibuf; local ($,, $\); our $nl; local *nl = \($self->{nl}); my $lt; my $qsep = quotemeta($/); while ($_[1] =~ /((?:(?!$qsep).)*(?:($qsep)|(?!$qsep).))/gs) { my $obuf = ''; if ($nl) { $lt ||= "[" . localtime() . "] "; $obuf .= $lt; } $obuf .= $1; print $fh $obuf or return 0; $nl = !!$2; } return length($ibuf); } 1; #### binmode(STDOUT, '>:via(TimeStamp)'); print("test\n");