Nutze bitte in Zukunft, die CODE-Tags dieses Forums, damit der Code besser zu lesen ist.
Benutze immer
use strict; und deklariere deine Variablen mit my, z.B. for(
my $i ...
Deine wrap-Funktion funktioniert ja ansonsten, jedoch ist es nicht sehr schön, wenn innerhalb von Worten umgebrochen wird, aber vielleicht ist das ja nicht so schlimm für dich.
Wenn du nur bei Leerzeichen umbrechen möchtest, könntest du es so umschreiben:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub wrap {
my $txt = $_[0];
my $wrap_at = 60;
my @w_lines = ();
my $l_wrapat;
if(length($txt) > $wrap_at) {
for(my $i = 0; $i < length($txt);$i+=$l_wrapat) {
$l_wrapat = $wrap_at;
if (substr($txt, $i, $l_wrapat) =~ /\s/) {
while ($i+$l_wrapat < length($txt) and substr($txt, $i+$l_wrapat, 1) !~ /\s/) { $l_wrapat-- }
}
my $nline = substr($txt, $i, $l_wrapat);
$nline =~ s/^\s*//g;
push(@w_lines, $nline);
}
}
$txt = join("\n", @w_lines);
}