On Nov 6, 2006, at 12:24 PM, Chris Ridd wrote:
---- old _wrap() -----------------------------
sub _wrap {
if($_[1] > 40) {
my $pos = $_[1];
while($pos < length($_[0])) {
substr($_[0],$pos,0) = "\n ";
$pos += $_[1]+1;
}
}
$_[0];
}
---- new _wrap() -----------------------------
sub _wrap {
my $string=$_[0];
my $len=$_[1];
my $a=(length($string)-$len>0);
my $b=((length($string )-$len)/($len-1));
join("\n ",unpack("a78" x $a . "a77" x $b . "a*",$string));
}
I've just committed this (revision 518) - thanks Robert!
Except it is wrong. It does not honor the len argument
($x = _wrap("a" x 200, 40)) =~ s/ /./g;
print "$x-\n";
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaa
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaa
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
.
.
.-
Here is a fixed version I just checked in
sub _wrap {
my $len=$_[1];
return $_[0] if length($_[0]) <= $len;
use integer;
my $l2 = $len-1;
my $x = (length($_[0]) - $len) / $l2;
my $extra = (length($_[0]) == ($l2 * $x + $len)) ? "" : "a*";
join("\n ",unpack("a$len" . "a$l2" x $x . $extra,$_[0]));
}
Graham.