メールアドレスのリストから携帯メールアドレスを抽出

メールアドレス一覧から、携帯メールアドレスを抽出する処理をPerlで書いてみた。

#!/usr/bin/perl -w
use strict;
use warnings;

sub write_file
{
    my $filename = shift();
    my $data     = shift();
    open(FH, "> $filename") or die("$! -> $filename");
    print(FH $data);
    close(FH);
}

my %mobile_domains = (
    'docomo.ne.jp'     => 'docomo',
    'softbank.ne.jp'   => 'SoftBank',
    'd.vodafone.ne.jp' => 'SoftBank',
    'h.vodafone.ne.jp' => 'SoftBank',
    't.vodafone.ne.jp' => 'SoftBank',
    'c.vodafone.ne.jp' => 'SoftBank',
    'r.vodafone.ne.jp' => 'SoftBank',
    'k.vodafone.ne.jp' => 'SoftBank',
    'n.vodafone.ne.jp' => 'SoftBank',
    's.vodafone.ne.jp' => 'SoftBank',
    'q.vodafone.ne.jp' => 'SoftBank',
    'ezweb.ne.jp'      => 'au',
    'disney.ne.jp'     => 'Disney Phone',
);

my (@mobile, @pc);
my @mailaddress = qw(
aaaaa@gmail.com
bbbbb@docomo.ne.jp
ccccc@softbank.ne.jp
ddddd@ezweb.ne.jp
eeeee@yahoo.co.jp
);

for my $addr (@mailaddress) {
    if ($addr =~ m!^[^@]+@[^@]+$!) {
        my ($name, $domain) = split('@', $addr);
        if (exists($mobile_domains{$domain})) {
            push(@mobile, $addr);
        } else {
            push(@pc, $addr);
        }
    }
}

write_file("mobile_addr.txt", join("\n", @mobile));
write_file("pc_addr.txt",     join("\n", @pc));

実行すると、mobile_addr.txtに携帯メアド、pc_addr.txtにそれ以外のメアドが書かれたファイルを出力するぞい。