kiat has asked for the wisdom of the Perl Monks concerning the following question:
Hi monks,
I use the code below to shorten an unusually long topic (hackish, perhaps) so that it doesn't mess the page's layout.
It works (with limited testing) but I'm intersted to find out how you would do it. All comments are welcomed :)my $str = trim_length("thisisaverylongsentencewithoutspacesinbetween", + 30); print "$str\n"; sub trim_length { my ($str, $desired_len) = @_; my $tmp_len = $desired_len; # Shorten $str if it's is one continuous string # and its length is greater than the desired length if ($str !~ /\s/ && length($str) > $desired_len) { $str = substr($str, 0, $desired_len); $str .= ' ...'; } # Otherwise, if the length of $str is greater than the # desired length, iterate over each character of in $str # to find an appropriate spot that's a space to chop # the string elsif (length($str) > $desired_len) { #print "here" and exit; $str = substr($str, 0, $desired_len); my $token = substr($str, $desired_len-1, $desired_len); while($token !~ / /) { $str = substr($str, 0, $tmp_len); $token = substr($str, $tmp_len-1, $tmp_len); $tmp_len--; } $str .= '...'; } return $str; }
Thanks in anticipation :)
Update: Thanks to all for your sharing of code :)
Update2: I now have a problem of deciding which method to go with but I've undoubtedly learnt new ways of looking at the same problem. Great thanks and cheers
Back to
Seekers of Perl Wisdom