Mail-Message
view release on metacpan or search on metacpan
lib/Mail/Message/Field/Fast.pm view on Meta::CPAN
use Scalar::Util qw/blessed/;
#--------------------
# The DATA is stored as: [ NAME, FOLDED-BODY ]
# The body is kept in a folded fashion, where each line starts with
# a single blank.
sub new($;$@)
{ my $class = shift;
my ($name, $body) = $class->consume(@_==1 ? (shift) : (shift, shift));
defined $body or return ();
my $self = bless +[$name, $body], $class;
# Attributes
$self->comment(shift) if @_==1; # one attribute line
$self->attribute(shift, shift) while @_ > 1; # attribute pairs
$self;
}
sub clone()
{ my $self = shift;
bless +[ @$self ], ref $self;
}
sub length()
{ my $self = shift;
length($self->[0]) + 1 + length($self->[1]);
}
sub name() { lc shift->[0] }
sub Name() { $_[0]->[0] }
sub folded()
{ my $self = shift;
wantarray or return $self->[0] .':'. $self->[1];
my @lines = $self->foldedBody;
my $first = $self->[0]. ':'. shift @lines;
($first, @lines);
}
sub unfoldedBody($;@)
{ my $self = shift;
$self->[1] = $self->fold($self->[0], @_)
if @_;
$self->unfold($self->[1]);
}
sub foldedBody($)
{ my ($self, $body) = @_;
if(@_==2) { $self->[1] = $body }
else { $body = $self->[1] }
wantarray ? (split m/^/, $body) : $body;
}
# For performance reasons only
sub print(;$)
{ my $self = shift;
my $fh = shift || select;
$fh->print($self->[0].':'.$self->[1]);
$self;
}
1;
( run in 1.379 second using v1.01-cache-2.11-cpan-71847e10f99 )