sub split_len { my ($str, $start, $len) = @_; my @ret; for (my $strlen = length $str; $start <= $strlen; $start += $len) { push @ret, substr $str, $start, $len; } return @ret; } my $c = join '', 'a'..'z'; print "@{[ split_len $c, 0, 3 ]}\n"; print "@{[ split_len $c, 0, 4 ]}\n"; print "@{[ split_len $c, 3, 4 ]}\n"; __END__ abc def ghi jkl mno pqr stu vwx yz abcd efgh ijkl mnop qrst uvwx yz defg hijk lmno pqrs tuvw xyz