Text::Wrap seems to do what you want. I think the following regular expression will
also do "what you want", as long as there are no words longer than your maximum line lenght:
use strict;
my $line_length = 10;
my $line = '123 1234 12345 123456 1234567';
my @lines = ($line =~ /(.{1,$line_length}(?:\s|$))/g);
print "-" x $line_length,"\n";
print "$_\n" for @lines;
... but I have only cursory tested that idea. I think it will fail for blanks that fall on the last column. Maybe you can fix that by allowing $line_length to be one larger than what fits onto the line.