# input : string (sentence) # output: truncated string at period, question mark or exclamation point sub strim { my ($s, $i) = @_; $s =~ s/^\s+$//g; return $s unless defined $i; if (length $s <= $i) { return $s; } else { while (right(left($s, $i), 2) ne '. ' && right(left($s, $i), 2) ne '? ' && right(left($s, $i), 2) ne '! ') { $i--; return left($s, $_[1]) if ($i < 1); } return left($s, $i); } } # input : string, integer # output: truncated string sub left { my ($s, $i) = @_; return unless defined $s; return $s unless defined $i; return substr($s, 0, $i); } # input : string, integer # output: truncated string sub right { my ($s, $i) = @_; return unless defined $s; return $s unless defined $i; return substr($s, length($s) - $i, $i); }