in reply to Only last record is written to the output file instead of all records

You keep overwriting the file. Simple solution: use >> instead of >. Better solution: open the files before the loop.
open ...; open ...; open ...; while (...) { ... } close ...; close ...; close ...;

Replies are listed 'Best First'.
Re^2: Only last record is written to the output file instead of all records
by valavanp (Curate) on Nov 17, 2008 at 06:49 UTC
    If i have the files open before the loop the files will be created automatically without satisfying the condition. For e.g if i have only 5 records, it will create 3 files. All the 5 records will be written to the first file and leaving other files blank without any content.

      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

        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