Joost's suggestion is good; the only problem with such solutions is if you occasionally have strings which don't have any/much whitespace, in which case the result can be shorter than desired. I've got a function in String::Escape on CPAN that checks for that:
use String::Escape qw( elide $Elipses );
local $Elipses;
print elide( $mystring, 50 );