The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use lib 'lib';

use Data::Dumper;
use Email::ARF::Report;

my $message = <<'END_MESSAGE';
From:  some@guy.com
Subject: lul!!
Message-Id: <abc@def.gh>

This...
  ...is...
    ...CAKETOWN!
END_MESSAGE

my $nl = $/;
$message =~ s{$nl}{\x0d\x0a}g;

# print $message;
# print '-' x 72, "\n";

my %fields;
$fields{'Source-IP'}     = "1.2.3.4";
$fields{'Feedback-Type'} = "abuse";
my $description = "This is an abuse report in ARF format.";

my $report = Email::ARF::Report->create(
  original_email => $message,
  description    => $description,
  fields         => \%fields,
);

# $report->{mime}{mycrlf} = "\x0d\x0a";

use Data::Visitor::Callback;
my $v = Data::Visitor::Callback->new(
  object => 'visit_ref',
  hash   => sub {
    my ($self, $h) = @_;
    $h->{mycrlf} = "\x0d\x0a" if exists $h->{header};
    $self->visit($_) for values %$h;
  },
);

$v->visit($report);

# print $report->as_string;
$Data::Dumper::Indent = 1;
print Dumper($report);