note
Not_a_Number
<p>Sorry if this is a bit late, FWIW...</p>
<p>1) Most of the replies published (well, those that work :-) truncate strings that are exactly of the desired length, while your original version keeps these intact. Test case:</p>
<code>my $str = trim_length ( 'this sentence is 30 signs long', 30 );</code>
<p>If you use eg [BrowserUK]'s code, this is easy to fix: just change</p>
<code>return $str if length $str < $n;</code>
<p>to:</p>
<code>return $str if length $str <= $n;</code>
<p>2) It might be an idea to strip off trailing whitespace, in order to avoid adding ' ...' to the end of a message that is essentially complete. My own solution, again FWIW, would be</p>
<code>sub trim_length {
my ( $str, $desired_len ) = @_;
$str =~ s/\s+$//; # Strip trailing whitespace
return $str if length $str <= $desired_len;
return sprintf "%.${desired_len}s ...",
substr $str, 0, ( rindex $str, ' ', $desired_len );
}</code>
<p>dave</p>
375470
375470