open $fh, '<', $ARGV[0] or die "Can't open $ARGV[0]: $!"; while (<$fh>) { my $Sql ; my $ReportId ; if ( /SQL_REPORT_ID (\d+)/ ) { $ReportId = $1; while (<$fh>) { last if (/END SQL_REPORT_ID/) ; $Sql .= "$_"; } my $pid = fork ; die "Can't fork: $!" unless defined $pid; if ($pid) { $Pids{$pid} = 1; } else { close $fh or die "Can't close $fh"; #print "\n\n\n\n\n\n\n\n\n\n\n---------$ReportId-------------\n\n$Sql\n"; print STDERR "Generated $ReportId\n"; exit(0); } } } ..etc.