sub expand { local $_ = shift; if ( /^(.*?)\{([^}]+)\}(.*)$/ ) { my( $pre, $spec, $post ) = ( $1, $2, $3 ); return map expand($pre.$_.$post), split /,/, $spec } if ( /^(.*?)\[(\d+):(\d+)\](.*)$/ ) { my( $pre, $lo, $hi, $post ) = ( $1, $2, $3, $4 ); return map expand($pre.$_.$post), $lo .. $hi } $_ } #### sub expand { local $_ = shift; my @a; (@a=/^(.*?)\{([^}]+)\}(.*)$/)?map(expand($a[0].$_.$a[2]),split/,/,$a[1]): (@a=/^(.*?)\[(\d+):(\d+)\](.*)$/)?map(expand($a[0].$_.$a[3]),$a[1]..$a[2]): $_ }