in reply to Re^2: Only last record is written to the output file instead of all records
in thread Only last record is written to the output file instead of all records

Test for the condition prior to entering the loop, OR, open within the loop, but on each iteration check to see if the file is already open. Easy way to do that would be to use a lexical filehandle, scoped to just outside the loop. Here's an example:

{ my $fh; while ( ....condition.... ) { unless( defined( $fh ) ) { open $fh, '>', $filename or die $!; } # ....do your stuff... } close $fh or die $!; }

Dave

  • Comment on Re^3: Only last record is written to the output file instead of all records
  • Download Code

Replies are listed 'Best First'.
Re^4: Only last record is written to the output file instead of all records
by jwkrahn (Abbot) on Nov 17, 2008 at 09:30 UTC

    Better to use fileno to test filehandles as a filehandle can be defined and closed:

    $ perl -le' print defined $FH ? "defined" : "not defined"; print fileno $FH ? "open" : "not open"; open my $FH, "<", "test.txt" or die "test.txt: $!"; print defined $FH ? "defined" : "not defined"; print fileno $FH ? "open" : "not open"; close $FH; print defined $FH ? "defined" : "not defined"; print fileno $FH ? "open" : "not open"; ' not defined not open defined open defined not open