$str=~s/^(.{1,19}(?:$|.|[^.]+)).*/$1/;
etwas leserlich
$str=~s/^
(.{1,19}
(?:
$
|
.
|
[^.]+
) # da ist etwas falsch
).*
/$1/x;
Das lässt sich aber leicht beheben.
Leider bleibt der Ansatz falsch, und unlösbar, wenn man den Terminus 'Satz' für Perl nicht spezifiziert und auch nicht verlangt, dass sich Input an eine solche Spezifikation zu halten habe.
Im Glücksfall gehts mit Css:
overflow:auto
mfg Beat