sub trim_length {
my($string, $desired_length) = @_;
# edit: swiped idea from Tachyon
if((length($string)) < $desired_length) { return $string; }
my @words = split(" ", $string);
my $clipped = "";
foreach(@words) {
my $temp = $clipped;
$clipped .= $_;
if((length($clipped)) > $desired_length) { $clipped = $temp; last
+; }
}
if((length($clipped)) == 0)
{ $clipped = substr($string, 0, $desired_length); }
$clipped .= "...";
return $clipped
}
Does the same as your code but with a little less effort. Breaks the string down into words, keeps adding words until it passes your minimum marker, then keeps the previous version. If the first word puts it over the minimum marker, then it goes back to the original $string and clips that.
theAcolyte