my @clumsy_split = split /($re)/, $string; my @split; my $flag = 0; for my $i ( 0 .. $#clumsy_split ) { my $field = $clumsy_split[$i]; if ( $flag ) { $flag = 0; } elsif ( $i % 2 || length $field < $limit ) { push @split, $field; next; } else { $flag = 1; } $split[-1] .= $field; }