#!/usr/bin/perl use strict; use warnings; use File::Find; use YAML::Syck; my %addresses; find(sub { return unless -f $_; open my $fh, '<', $_ or die; local $/ = ''; # "Paragraph" mode, reads a block of text to next \n\n $_ = <$fh>; # Read Header block if (/To:.+\b(andrew\+[^\@\s]+\@[-a-z0-9\.]+)\b/mi) { # /m to anchor, /i to ignore case my $addr = $1; # some addresses are in mailing list bounce format if ($addr =~ s/[=\#\%](?:3d)?/@/) { # No need for /xms here $addr =~ s/\@[^@]+$//; } $addresses{$addr}++; } close $fh; }, glob($ENV{HOME} . '/Maildir/.misc*')); print Dump \%addresses; #### /To:.+ \b ( andrew\+ [^\@\s]+ \@ [-a-z0-9\.]+ ) \b /mix