沢山のメールアドレスを、ドメイン毎にソートしたい場合の処理をPerlで書いてみた。
#!/usr/bin/perl -w use strict; use warnings; my @maddr_list = ( 'bbb@ezweb.ne.jp', 'aaa@yahoo.co.jp', 'bbb@yahoo.co.jp', 'ccc@gmail.com', 'bbb@softbank.ne.jp', 'ccc@yahoo.co.jp', 'aaa@docomo.ne.jp', 'aaa@softbank.ne.jp', 'ccc@docomo.ne.jp', 'bbb@gmail.com', 'ccc@softbank.ne.jp', 'bbb@docomo.ne.jp', 'ccc@ezweb.ne.jp', 'aaa@ezweb.ne.jp', 'aaa@gmail.com', ); my %hash = (); for my $address (@maddr_list) { my ($user, $domain) = $address =~ m!^(.+)@([^@]+)$!; if (!exists($hash{$domain})) { $hash{$domain} = []; } push(@{$hash{$domain}}, $address); } for my $domain (sort(keys(%hash))) { for my $address (sort(@{$hash{$domain}})) { printf("%s\n", $address); } }
結果。
aaa@docomo.ne.jp bbb@docomo.ne.jp ccc@docomo.ne.jp aaa@ezweb.ne.jp bbb@ezweb.ne.jp ccc@ezweb.ne.jp aaa@gmail.com bbb@gmail.com ccc@gmail.com aaa@softbank.ne.jp bbb@softbank.ne.jp ccc@softbank.ne.jp aaa@yahoo.co.jp bbb@yahoo.co.jp ccc@yahoo.co.jp