I would like to know how to modify the below code to strip =20 characters at the end of many lines, and mainly to sort the messages chronologically from first received or sent to last. I am not sure if this would be an internal Perl routine or not.
#!/usr/bin/perl use warnings; use strict; use Mail::Box::Manager; my $file = shift || $ENV{MAIL}; my $mgr = Mail::Box::Manager->new( access => 'r', ); my $folder = $mgr->open( folder => $file ) or die '$file: Unable to open: $!\n'; for my $msg ($folder->messages) { my $to = join( ', ', map { $_->format } $msg->to ); my $from = join( ', ', map { $_->format } $msg->from ); my $date = localtime( $msg->timestamp ); my $subject = $msg->subject; my $body = $msg->body; # Strip all quoted text $body =~ s/^>.*$//msg; print <<''; From: $from To: $to Date: $date $body }
When trying to run this I get the following errors:
‘my’ variable $msg masks earlier declaration in same scope at x.pl line 16. syntax error at x.pl line 15, near ‘) ) ‘ syntax error at x.pl line 31, near ‘}’ (Might be a runaway multi-line << string starting on line 25) Execution of x.pl aborted due to compilation errors.
I am not sure as to why, as the syntax seems fine.
I guess that those instances of
=20are in the body of the message. Reading just a bit of the documentation for Mail::Message will reveal this helpful note:Thus instead of calling
$msg->bodyin your loop, simply call$msg->decoded->string.Accomplishing sorting should be easiest when you use
Mail::Message::timestamp: