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;