1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
# This code is part of Perl distribution Mail-Message version 3.019.
# The POD got stripped from this file by OODoc version 3.05.
# For contributors see file ChangeLog.
# This software is copyright (c) 2001-2025 by Mark Overmeer.
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
# SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later
package Mail::Message::Body::String;{
our $VERSION = '3.019';
}
use base 'Mail::Message::Body';
use strict;
use warnings;
use Carp;
use Mail::Box::FastScalar ();
#--------------------
# The scalar is stored as reference to avoid a copy during creation of
# a string object.
sub _data_from_filename(@)
{ my ($self, $filename) = @_;
delete $self->{MMBS_nrlines};
open my $in, '<:raw', $filename
or $self->log(ERROR => "Unable to read file $filename for message body scalar: $!"), return;
my @lines = $in->getlines;
$in->close;
$self->{MMBS_nrlines} = @lines;
$self->{MMBS_scalar} = join '', @lines;
$self;
}
sub _data_from_filehandle(@)
{ my ($self, $fh) = @_;
if(ref $fh eq 'Mail::Box::FastScalar')
{ my $lines = $fh->getlines;
$self->{MMBS_nrlines} = @$lines;
$self->{MMBS_scalar} = join '', @$lines;
}
else
{ my @lines = $fh->getlines;
$self->{MMBS_nrlines} = @lines;
$self->{MMBS_scalar} = join '', @lines;
}
$self;
}
sub _data_from_lines(@)
{ my ($self, $lines) = @_;
$self->{MMBS_nrlines} = @$lines unless @$lines==1;
$self->{MMBS_scalar} = @$lines==1 ? shift @$lines : join('', @$lines);
$self;
}
sub clone()
{ my $self = shift;
(ref $self)->new(data => $self->string, based_on => $self);
}
sub nrLines()
{ my $self = shift;
return $self->{MMBS_nrlines} if defined $self->{MMBS_nrlines};
my $lines = $self->{MMBS_scalar} =~ tr/\n/\n/;
$lines++ if $self->{MMBS_scalar} !~ m/\n\z/;
$self->{MMBS_nrlines} = $lines;
}
sub size() { length $_[0]->{MMBS_scalar} }
sub string() { $_[0]->{MMBS_scalar} }
sub lines()
{ my @lines = split /^/, shift->{MMBS_scalar};
wantarray ? @lines : \@lines;
}
sub file() { Mail::Box::FastScalar->new(\shift->{MMBS_scalar}) }
sub print(;$)
{ my $self = shift;
my $fh = shift || select;
$fh->print($self->{MMBS_scalar});
$self;
}
sub read($$;$@)
{ my ($self, $parser, $head, $bodytype) = splice @_, 0, 4;
delete $self->{MMBS_nrlines};
(my $begin, my $end, $self->{MMBS_scalar}) = $parser->bodyAsString(@_);
$self->fileLocation($begin, $end);
$self;
}
sub endsOnNewline() { $_[0]->{MMBS_scalar} =~ m/\A\z|\n\z/ }
1;
|