open( DAT, '<', 'export.dat' ) or die "Open for read failed on export.dat: $!"; my $tmp; # file handle while ( ) { next unless ( /\S/ ); if ( /^1/ ) { if ( defined( $tmp )) { output_data( $tmp ); } open( $tmp, '+>', 'export.tmp' ) # open read/write, truncate first or die "Open failed for export.tmp: $!"; } print $tmp $_; } output_data( $tmp ); sub output_data { my $fh = shift; seek( $fh, 0, 0 ); # rewind to start of file # do stuff with export.tmp contents... close $fh; }