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)