in reply to substr question
I modified your problem definition into:
How to split a string into several substrings (of a given maximum length) without breaking a word when splitting.
I found this (quickly hacked) solution:
#! /opt/perl/bin/perl use strict; use warnings; my $text = "Hello, I am a perl/mysql programmer, but am self taught so + I do not know all the awesome features Perl has, however, I am ok at + it though, I guess."; sub split_at { my ( $text, $len ) = @_; my @result; my @parts = split /[ ]/, $text; my $short = shift @parts; while ( @parts ) { if ( length($short) + length($parts[0]) < $len ) { $short = join( ' ', $short, shift @parts ); } else { push @result, $short; $short = shift @parts; } } push @result, $short; return @result; } { local $, = local $\ = $/; print split_at( $text, 100 ); # beware print split_at( 'a'x110, 100 ); }
Limitation: If the given string doesn't contain any whitespace (\x20), it won't split at all.
If you just want/need the first substring, just use the first returned element.
Updates:
- cleaned up code
- fixed comparison; thanks, rowdog
In Section
Seekers of Perl Wisdom