Something like this I think. If it ends in a space it should just cut off the space but if it is a space and then letters it will assume this is an incomplete word and cut this off as well.
sub {
my $field = shift;
my $length=shift;
my $short = substr($field, 0, $length) ; $short =~ s/\s\S*$//; $short .= '...';
return $short;
}
sub {
my $field = shift;
my $length=shift;
my $short = substr($field, 0, $length) ; $short =~ s/\s\S*$//; $short .= '...';
return $short;
}