1# Copyrights 2001-2021 by [Mark Overmeer <markov@cpan.org>]. 2# For other contributors see ChangeLog. 3# See the manual pages for details on the licensing terms. 4# Pod stripped from pm file by OODoc 2.02. 5# This code is part of distribution Mail-Message. Meta-POD processed with 6# OODoc into POD and HTML manual-pages. See README.md 7# Copyright Mark Overmeer. Licensed under the same terms as Perl itself. 8 9package Mail::Message::Body::String; 10use vars '$VERSION'; 11$VERSION = '3.011'; 12 13use base 'Mail::Message::Body'; 14 15use strict; 16use warnings; 17 18use Carp; 19use Mail::Box::FastScalar; 20 21 22#------------------------------------------ 23# The scalar is stored as reference to avoid a copy during creation of 24# a string object. 25 26sub _data_from_filename(@) 27{ my ($self, $filename) = @_; 28 29 delete $self->{MMBS_nrlines}; 30 31 local *IN; 32 unless(open IN, '<', $filename) 33 { $self->log(ERROR => 34 "Unable to read file $filename for message body scalar: $!"); 35 return; 36 } 37 38 my @lines = <IN>; 39 close IN; 40 41 $self->{MMBS_nrlines} = @lines; 42 $self->{MMBS_scalar} = join '', @lines; 43 $self; 44} 45 46sub _data_from_filehandle(@) 47{ my ($self, $fh) = @_; 48 if(ref $fh eq 'Mail::Box::FastScalar') 49 { my $lines = $fh->getlines; 50 $self->{MMBS_nrlines} = @$lines; 51 $self->{MMBS_scalar} = join '', @$lines; 52 } 53 else 54 { my @lines = $fh->getlines; 55 $self->{MMBS_nrlines} = @lines; 56 $self->{MMBS_scalar} = join '', @lines; 57 } 58 $self; 59} 60 61sub _data_from_glob(@) 62{ my ($self, $fh) = @_; 63 my @lines = <$fh>; 64 $self->{MMBS_nrlines} = @lines; 65 $self->{MMBS_scalar} = join '', @lines; 66 $self; 67} 68 69sub _data_from_lines(@) 70{ my ($self, $lines) = @_; 71 $self->{MMBS_nrlines} = @$lines unless @$lines==1; 72 $self->{MMBS_scalar} = @$lines==1 ? shift @$lines : join('', @$lines); 73 $self; 74} 75 76sub clone() 77{ my $self = shift; 78 ref($self)->new(data => $self->string, based_on => $self); 79} 80 81sub nrLines() 82{ my $self = shift; 83 return $self->{MMBS_nrlines} if defined $self->{MMBS_nrlines}; 84 85 my $lines = $self->{MMBS_scalar} =~ tr/\n/\n/; 86 $lines++ if $self->{MMBS_scalar} !~ m/\n\z/; 87 $self->{MMBS_nrlines} = $lines; 88} 89 90sub size() { length shift->{MMBS_scalar} } 91 92sub string() { shift->{MMBS_scalar} } 93 94sub lines() 95{ my @lines = split /^/, shift->{MMBS_scalar}; 96 wantarray ? @lines : \@lines; 97} 98 99sub file() { Mail::Box::FastScalar->new(\shift->{MMBS_scalar}) } 100 101sub print(;$) 102{ my $self = shift; 103 my $fh = shift || select; 104 if(ref $fh eq 'GLOB') { print $fh $self->{MMBS_scalar} } 105 else { $fh->print($self->{MMBS_scalar}) } 106 $self; 107} 108 109sub read($$;$@) 110{ my ($self, $parser, $head, $bodytype) = splice @_, 0, 4; 111 delete $self->{MMBS_nrlines}; 112 113 (my $begin, my $end, $self->{MMBS_scalar}) = $parser->bodyAsString(@_); 114 $self->fileLocation($begin, $end); 115 116 $self; 117} 118 119sub endsOnNewline() { shift->{MMBS_scalar} =~ m/\A\z|\n\z/ } 120 1211; 122