... my $readamount = int(($length - $got_so_far)/8192)?8192:$length-$got_so_far; while ( ($got_so_far < $length) and read( $sock, $buffer, $readamount ) ){ print $fh $buffer; $got_so_far += length $buffer; $readamount = int(($length - $got_so_far)/8192)?8192:$length-$got_so_far; print "Got: $got_so_far\n" if $DEBUG; } ...