use strict; use warnings; # Initialise file names and open files, one # for reading, two for writing. # my $inputFile = q{spw579580.inp}; my $headerFile = q{spw579580.hdrs}; my $detailFile = q{spw579580.dets}; open my $inputFH, q{<}, $inputFile or die qq{open: $inputFile: $!\n}; open my $headerFH, q{>}, $headerFile or die qq{open: $headerFile: $!\n}; open my $detailFH, q{>}, $detailFile or die qq{open: $detailFile: $!\n}; # In a code block localise $/, the input record # separator, to your end of record string. # { local $/ = qq{EOE\n}; # Read each record in a while loop. Strip the # start and end record sentinels off. # while (defined(my $record = <$inputFH>)) { $record =~ s{\A\^L\n}{}; $record =~ s{EOE\n\z}{}; # We now have the record in a scalar # variable $record ready for processing. # # FURTHER PROCESSING GOES HERE ... } } # Close open filehandles. # close $inputFH or die qq{close: $inputFile: $!\n}; close $headerFH or die qq{close: $headerFile: $!\n}; close $detailFH or die qq{close: $detailFile: $!\n};