Perl从电子邮件地址中提取域名,但不包括子域名

dan*_*nix 1 regex subdomain perl tld

我正在努力做标题所说的,我有这个:

sub getDomain {

    my $scalarRef = shift;
    my @from_domain = split(/\@/,$$scalarRef);

    if($from_domain[1] =~ m/^.*?(\w+\.\w+)$/){
       print "$from_domain[1] $1" if($username eq 'xxx');
       return $1;
    }
}
Run Code Online (Sandbox Code Playgroud)

返回domain.com的user@domain.com工作正常,但当然domain.co.uk将返回.co.uk,我需要domain.co.uk.关于如何继续这个的任何建议,我猜一个模块和一些建议某种tld查找表.

Dav*_*esh 8

不要使用RegExp.

use Email::Address;
my ($addr) = Email::Address->parse('foo@domain.co.uk');
print "Domain: ".$addr->host."\n";
print "User:   ".$addr->user."\n";
Run Code Online (Sandbox Code Playgroud)

打印:

Domain: domain.co.uk
User:   foo
Run Code Online (Sandbox Code Playgroud)