while ($len = sysread(FROM, $buf, 16384)) { if (!defined $len) { next if $! =~ /^Interrupted/; die "System read error: $!\n"; } $offset = 0; while ($len) { # Handle partial writes. $written = syswrite(TO, $buf, $len, $offset); die "System write error: $!\n" unless defined $written; $len -= $written; $offset += $written; }; }