use strict; use warnings; my $path = "c:/path/to/files"; my $maxsize = 1048576; opendir my $dirhandle, $path or die $!; foreach my $file ( readdir $dirhandle ) { next unless -f $file; next unless -s $file > $maxsize; my $count = 0; open my $in, '<', "$path/$file" or die $!; { local $/ = \$maxsize; while ( my $record = <$in> ) { my $outname = "$file.split" . sprintf "%03s", $count++; open my $out, '>', "$path/$outname" or die $!; print $out $record; close $out or die $!; } } close $in; }