my $letter = q<[a-zA-Z]>;
my $letdig = q<[a-zA-Z0-9]>;
my $ldh = q<[-a-zA-Z0-9]>;
my $label = "$letter(?:$ldh*$letdig)?";
my $domain = "$label(?:\.$label)*";
####
my $label = "$letdig(?:$ldh*$letdig)?";
my $domain = "$label(?:\.$label)*\.$letter{2,}";
##
##
my $atext = q<[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]>;
# or $atext = q<[-\w!#$%&'*+/=?^`a-z{|}~]>;
# (but that raises the question of non-ASCII letters)
my $atom = "$atext+";
my $dot_atom = "$atom(?:.$atom)*";
my $addr_spec = $dot_atom . '@' . $dot_atom;
##
##
my $addr_spec = qr/^$dot_atom\@$domain$/;