#!/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; while (<$fh>) { last if $_ eq "\n"; # only scan headers $_ = lc $_; if (/\b(andrew\+[^\@\s]+\@[-a-z0-9\.]+)\b/xms) { my $addr = $1; # some addresses are in mailing list bounce format if ($addr =~ s/[=\#\%](?:3d)?/@/xms) { $addr =~ s/\@[^@]+$//xms; } $addresses{$addr}++; } } close $fh; }, glob($ENV{HOME} . '/Maildir/.misc*')); print Dump \%addresses;