use Email::Address; my @addresses = map { Email::Address->parse($_) } ; print is_equivalent(@addresses) ? '' : 'not ' , "equivalent\n"; sub is_equivalent { my ($a, $b) = @_; return lc $a->address eq lc $b->address; } __DATA__ "John Doe" (Johnnie "Two Toes") jDOE@BLA.COM #### use Email::Address; my @addresses = map { Email::Address->parse( $_ ) } ; for my $address (@addresses) { printf("%8s: %s\n", $_, ( $address->$_ or '' ) ) for ( qw( original address user host name phrase comment format ) ); print "-------\n"; } __DATA__ abc@foo.com bla@gmail "Eve Rybody" foo@asdf.com%bar.com "Alan B. Combs" (I can't think of anything complex)