#slurp the files into arrays open(FILE, 'filename_1'); @LINES_1 = ; close(FILE); open(FILE, 'filename_2'); @LINES_2 = ; close(FILE); open(FILE, 'filename_3'); @LINES_3 = ; close(FILE); # cycle through your file, pushing lines onto other files' arrays for $i (0 .. $#LINES_1) { if (condition_a) {push(@LINE_2, $LINES_1[$i]);}} if (condition_b) {push(@LINE_3, $LINES_1[$i]);}} } # write new arrays to files open(FILE, ">filename_2"); for my $i (0 .. $#LINES_2) {print FILE "$LINES_2[$i]";} close(FILE); open(FILE, ">filename_3"); for my $i (0 .. $#LINES_2) {print FILE "$LINES_3[$i]";} close(FILE);