57 chars: $t=$_;@s=(map({substr$t,0,$_}1..$s-1),/(?=(.{1,$s}))/gs); 57 chars, string in $t: @s=map{substr$t,$_>0&&$_,$_<0?$s+$_:$s}1-$s..-1+length$t; 55 chars, string in $t: @s=(map({substr$t,0,$_}1..$s-1),$t=~/(?=(.{1,$s}))/gs); 55 chars: @s=/./gs;@s=map{join'',@s[$_>0&&$_..$_+$s]}- --$s..$#s; #### 52 chars: for$i(1..$s){push@s,/(?(?{$i<$s})^)(?=(.{1,$i}))/sg} #### 55 chars, string in $t: @s=map{eval'$t=~/(?=(.{1,$_}))/s'.($_<$s?'':"g")}1..$s;