#!/usr/bin/perl use strict; use warnings; # create a "my $fh data handle" from DATA # in your code, you would open my $fh to an actual # input file my $fh =\*DATA; while (my $line = <$fh>) { process_record ($fh, $line) if ($line =~ /^zone /); } sub process_record { my ($fh, $line) = @_; my ($filename) = $line =~ /^zone\s+(\w+)/; # open a new output file handle to $filename print "would print to a file called $filename\n"; my $record_line; while (defined($record_line =<$fh>) and $record_line !~ /endoffile/) { print " $record_line"; #you print to outfile #instead of to STDOUT } # optional close of the output file # closes automatically when its $outfh goes out of scope } =prints would print to a file called 2file2 record1a record1b record1c record 1d 2 record empty =cut __DATA__ #comment line => perhaps a version number? one 1file1.nest. 1ss record1a record1b record1c record 1d 2 record empty endoffile zone 2file2.egg. 1ss record1a record1b record1c record 1d 2 record empty endoffile