package Mail::Stats::Parser; use strict; use Mail::Stats::Record; use vars qw($Start_Header $Status_Header $Ignore_Header $End_Header); $Start_Header = 'From \S+\s+\w\w\w \w\w\w\s+\d+ \d+:\d+:\d+ \d+'; $Status_Header = '(X-)?Status:'; $Ignore_Header = 'Subject: DON\'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA'; $End_Header = '\s*'; sub parse { my $fh = shift; my $mail = new Mail::Stats::Record(); my $header = 0; while(<$fh>) { if(/^From \S+\s+\w+ \w+\s+\d+ \d+:\d+:\d+ \d+/) { $header = 1; $mail->{MESSAGES}++; } elsif ($header && /^$Status_Header/og) { while(/(\w)/g) { $mail->{STATUS}->{$1}++; } } elsif ($header && /^$Ignore_Header/o) { $mail->{MESSAGES}--; $header = 0; } elsif ($header && /^$End_Header$/o) { $header = 0; } } return $mail; } 1;