my $chunk_size = 10; foreach my $chunk (0 .. 10_000 / $chunk_size) { my $start = $chunk * $chunk_size; my $end = $start + $chunk_size - 1; # I say "${start}" to keep it from being interpreted as $start_ mkdir "2005/${start}_$end" or die "can't mkdir: $!"; foreach my $client ($start .. $end) { mkdir "2005/${start}_$end/$client" or die "can't mkidir: $!"; foreach (qw/addendums current archive/) { mkdir "2005/${start}_$end/$client/$_" or die "can't mkidir: $!"; } } }