$re = qr{ (??{ '\b\w{1,' . ($len - ($+[0] - $-[0])) . '}\b' }) (?(?{ ($+[0] - $-[0]) < $len }) (??{ '\W{0,' . ($len - ($+[0] - $-[0])) . '}' }) ) (?(?{ ($+[0] - $-[0]) == $len }) (?;) ) }x; s{($re+)}{$1\n}xg;