foreach my $length (1..length($string)) { foreach my $offset (0..length($string)-$length) { # push @result,substr($string,$offset,$length); push @{$result[$length]}, $offset; } }