#!/usr/bin/perl tie *STDOUT, TrapClass; my $pid = fork(); die "" if !defined $pid; exit 0 if $pid; # parent exits my $tied_descr = fileno(STDOUT); exec "/bin/date >&$tied_descr"; # child package TrapClass; use Fcntl qw(F_GETFD F_SETFD FD_CLOEXEC); sub TIEHANDLE { my $class = shift; open(my $fh, ">out") or die; my $flags = fcntl($fh, F_GETFD, 0) or die "Can't get flags: $!\n"; # clear close-on-exec flag fcntl($fh, F_SETFD, $flags & ~FD_CLOEXEC) or die "Can't set flags: $!\n"; bless { fh => $fh }, $class; } sub PRINT { my $self = shift; my $fh = $self->{fh}; print $fh @_; } sub FILENO { my $self = shift; my $fh = $self->{fh}; return fileno($fh); }