use Fcntl qw(F_SETFD F_GETFD FD_CLOEXEC); my $ssherr = File::Temp->new; my $flags = fcntl($ssherr, F_GETFD, 0) or die "Can't get FD flags for '$ssherr': $!"; fcntl($ssh_err, F_SETFD, $flags & ~FD_CLOEXEC) or die "Cant clear close-on-exec flag for '$ssherr': $!";