If for some reason you'd want to avoid splitting or analyzing the entire input string as a whole, you might consider a solution like
#!/usr/bin/perl
use warnings;
use strict;
my $n = shift;
my $text = 'A huge string separated
+ by lots and lots of words that I\'d
like to break up into n shorter strings of length y';
while ($text) {
$text = cut_head( $text, $n );
}
exit;
sub cut_head {
my ($text, $wrap_length) = @_;
my $actual_length = 0;
WORD:
while ($actual_length < $wrap_length and $actual_length < length($
+text) ) {
my $index = get_next_word( $text, $actual_length, $wrap_length
+ );
$actual_length ||= $index;
last WORD if $index >= $wrap_length;
$actual_length = $index;
next WORD;
}
my $head = substr( $text, 0, $actual_length);
my $tail = substr( $text, $actual_length );
print "$head\n";
return $tail;
}
Of course, depending on how exactly you'll want to deal with whitespace, some refining would be needed.
Just add the get_next_word sub and you're done.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.