open(my $in_fh, '<', $in_qfn) or die("Can't open input file \"$in_qfn\": $!\n"); my $out_fh; my $file_num = 0; while (<$in_fh>) { if ($. % $max_file_size == 1) { undef $out_fh; } if (!defined($out_fh)) { my $out_qfn = sprintf('part%04d', $file_num++); open($out_fh, '<', $out_qfn) or die("Can't create output file \"$out_qfn\": $!\n"); } print $out_fh $_; }