Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

みんな、どんなメーラを使っているの?

2006-01-27(Fri)と似た話題ですが、今度は、メーラの人気度の統計を取ってみたくなりました。
~/Mail以下に、さらにディレクトリがあってメールが分類されているので、各ディレクトリをたどって、集計していく必要があります。「初めてのPerl」のp207を見ると、File::Findモジュールを利用すると再帰的なディレクトリ処理ができるとのことなので、早速、使ってみました。
mailer_check関数内のメーラごとの条件分岐が、もう少しうまく書けないかなぁと思います。

集計してみて、分かったことは

ことです。ちなみに僕は、Mewを学生時代から愛用しています。

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;

my $debug = 0;
my $Mailpath = '~/Mail';
my %mailer;

sub main {
    find(\&mailer_check, $Mailpath);
    &display_by_count;
}

sub mailer_check {
    my $file = $_;
    # backupは送信メールのため処理の対象外
    unless ($File::Find::name =~ /backup/) { 
	print "$File::Find::name\n" if $debug;
	if (-f $file and $file =~ /^\d+$/) {
	    print "$file: \n" if $debug;
	    open MAIL, $file or die "$!";
	    while (my $line = <MAIL>){
		if ($line =~ /^X-Mailer:\s*(.*)$/ 
		    or $line =~ /^User-Agent:\s*(.*)$/) { 
		    my $mailer = $1;
		    print "$file: $mailer\n" if $debug;
		    if ($mailer =~ /Mew/) {
			$mailer{"Mew"}++;
		    } elsif ($mailer =~ /Outlook/) {
			$mailer{"Outlook"}++;
		    } elsif ($mailer =~ /Thunderbird/){
			$mailer{"Thunderbird"}++;
		    } elsif ($mailer =~ /AL-Mail/) {
			$mailer{"AL-Mail"}++;
		    } elsif ($mailer =~ /Sylpheed/){
			$mailer{"sylpheed"}++;
		    } elsif ($mailer =~ /Becky/) {
			$mailer{"Becky!"}++;
		    } elsif ($mailer =~ /Denshin/){
			$mailer{"Denshin8Go"}++;
		    } else {
			$mailer{"$mailer"}++;
		    }
		}
	    }
	}
    }
}

sub display_by_count {
    foreach (sort by_count keys %mailer){
	print "$_ : $mailer{$_}\n";
    }
}

sub by_count {
    $mailer{$b} <=> $mailer{$a};
}

main;
1;