i have a lot of data coming/pouring in from this:

my ($rout, $pid) = $ssh->pipe_out($cmd);
while (my $line = <$rout>) {
    print filehandle $line;
}

I want to stop writing after certain size is written (say 1gb).

so i can try this: (it is working). But I am worried I am doing too many stat 
(and i am imagining it would be very expensive operation). there are about 
500,000 lines coming in for 500mb data file, so below is doing stat 500 
thousand times!!!


my ($rout, $pid) = $ssh->pipe_out($cmd);
while (my $line = <$rout>) {

  my 
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)=
 stat(filehandle);
  if ($size < $huge_limit ){
       print $tmp_fh  $line;
       } else {
          seek($tmp_fh, 0, 0);
          print $tmp_fh "file size limit reached\n";
           kill TERM => $pid;
          last;
        }
} ###end while


so i am 'thinking' to try this: storing output in local temp array and checking 
when it reaches 10mb ($huge_limit) then save it to file and increase counter, 
when it happens total of $huge_limit_counter times (50 for 500mb limit). I 
close the channel and proceed. Here I am thinking, checking size of array 
500,000 times (a 500k line array) is somehow 'more efficient' then checking 
file-size using stat.


            my $counter=1;my @tmp_arr;
                my ($rout, $pid) = $ssh->pipe_out($cmd);
                    while (my $line = <$rout>) {
                        push(@tmp_arr,$line);
                        if (size(\@tmp_arr) > $huge_limit){
                            $counter++;
                            if ($counter >= $huge_limit_counter){
                                kill TERM => $pid;
                                last;
                            } else {
                            print $tmp_fh @tmp_arr;
                            undef(@tmp_arr);
                            }
                        }
                        }
                    if(tell($rout) != -1){close $rout;}


Please advice any suggestion for increasing efficiency of this code.

thank you.
Rajeev

Reply via email to