my $file_name_in = 'infile.txt'; my $file_name_out = 'file%d.txt'; my $max_lines = 800; open(my $fh_in, '<', $file_name_in) or die("Unable to open input file \"$file_name_in\": $!\n"); my $fh_out; while (<$fh_in>) { if (($. - 1) % $max_lines == 0) { my $file_num = int(($. - 1) / $max_lines) + 1; my $file_name = sprintf($file_name_out, $file_num); undef $fh_out; open($fh_out, '>', $file_name) or die("Unable to create file \"$file_name\": $!\n"); } print { $fh_out } $_; }