use strict; use warnings; my @dirs = ( make_seq( 'AB', 6, 1, 30 ), make_seq( 'BC', 6, 1, 50 ), ); for my $dir (@dirs) { for my $subdir ( make_seq( 'S', 6, 1, 100 ) ) { print "$ENV{HOME}/$dir/$subdir\n"; } } sub make_seq { my ( $prefix, $total_length, $from, $to ) = @_; my $length = $total_length - length($prefix); my $format = "${prefix}%0${length}d"; return map sprintf( $format, $_ ), $from .. $to; }