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.

Reply via email to