in reply to Problem: how to split long words

The following fix for the code provided by ccn.

Should be
($cnt = 1), push @result, '-' if $cnt > 3; not
($cnt = 0), push @result, '-' if $cnt > 3;
If $cnt = 0 then the 2nd, 3rd... group of characters in each word will be (N+1) long. In the following example the first group will be 3 characters long and all the rest groups will be 4 characters long
sub splitlong { my $text = shift; my @result; my ($cnt, $inside) = (0, 0); for (split //, $text) { ($inside = 0), next if $inside and $_ eq ']'; $inside = 1 if !$inside and $_ eq '['; next if $inside; $cnt = /\s/s ? 0 : $cnt + 1; ($cnt = 1), push @result, '-' if $cnt > 3; } continue { push @result, $_; } warn "invalid input: $text" if $inside; return join '', @result; } my $text = 'ju[color=1]s[/color]t a sam[color=2]p[/color]le'; print splitlong($text);