use strict;
use warnings;
use Data::Dump qw/pp dd/;
my $body = <<'__HTML__';
asdfghjk rtz ertzuiop rtzuiopu rtzuiop tzuiopu rtghljh
AaaaaaaaaaaaaaABbbbbbbbbbbbbbbB
__HTML__
#pp $body;
my $err = FC012_shorten_lines_mail_body(\$body);
#pp $body;
print $err,$body;
sub FC012_shorten_lines_mail_body {
my ($body_ref) = @_;
my $err = undef;
# callback with closure for error
my $replace_last_whitespace = sub {
my ($chunk) = @_;
# dd "CHUNK: $chunk";
my $ok = $chunk =~ s/ ([^\s]*)$/\n$1/;
unless ($ok) {
my $snip_length = 4; # for testing, should be 40
my $start_chunk = substr ($chunk,0,$snip_length);
my $end_chunk = substr ($chunk,-$snip_length,$snip_length);
$err .= "Failed to shorten chunk >>$start_chunk...$end_chunk<<\n";
}
return $chunk;
};
# --- prepend all
-tags with real linebreak
$$body_ref =~ s#(
])#\n$1#g;
# --- find all reamining chunks in one line and
# replace last whitespace with \n
my $length = 15; # for testing, should be 998
$$body_ref =~ s/([^\n]{$length})/ $replace_last_whitespace->($1) /ge;
# --- return potential error message
return $err ;
}