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