# NAME

ParseUtil::Domain - Domain parser and puny encoder/decoder.

[![Build Status](https://travis-ci.org/heytrav/ParseUtil-Domain.svg?branch=master)](https://travis-ci.org/heytrav/ParseUtil-Domain)

# SYNOPSIS

    use ParseUtil::Domain ':parse';

      my $processed = parse_domain("somedomain.com");
      #$processed:
      #{
          #domain => 'somedomain',
          #domain_ace => 'somedomain',
          #zone => 'com',
          #zone_ace => 'com'
      #}

# DESCRIPTION

This purpose of this module is to parse a domain name into its respective name and tld. Note that
the _tld_ may actually refer to a second- or third-level domain, e.g. co.uk or
plc.co.im.  It also provides respective puny encoded and decoded versions of
the parsed domain.

This module uses TLD data from the [Public Suffix List](http://publicsuffix.org/list/) which is included with this
distribution.

# INTERFACE

## parse\_domain

-
parse\_domain(string)
    -
    Examples:

             1. parse_domain('somedomain.com');

              Result:
              {
                  domain     => 'somedomain',
                  zone       => 'com',
                  domain_ace => 'somedomain',
                  zone_ace   => 'com'
              }

            2. parse_domain('test.xn--o3cw4h');

              Result:
              {
                  domain     => 'test',
                  zone       => 'ไทย',
                  domain_ace => 'test',
                  zone_ace   => 'xn--o3cw4h'
              }

            3. parse_domain('bloß.co.at');

              Result:
              {
                  domain     => 'bloss',
                  zone       => 'co.at',
                  domain_ace => 'bloss',
                  zone_ace   => 'co.at'
              }

            4. parse_domain('bloß.de');

              Result:
              {
                  domain     => 'bloß',
                  zone       => 'de',
                  domain_ace => 'xn--blo-7ka',
                  zone_ace   => 'de'
              }

            5. parse_domain('www.whatever.com');

             Result:
              {
                  domain     => 'www.whatever',
                  zone       => 'com',
                  domain_ace => 'www.whatever',
                  zone_ace   => 'com',
                  name       => 'whatever',
                  name_ace   => 'whatever',
                  prefix     => 'www',
                  prefix_ace => 'www'
              }

## puny\_convert

Toggles a domain between puny encoded and decoded versions.

    use ParseUtil::Domain ':simple';

    my $result = puny_convert('bloß.de');
    # $result: xn--blo-7ka.de

    my $reverse = puny_convert('xn--blo-7ka.de');
    # $reverse: bloß.de

# DEPENDENCIES

-
[Net::IDN::Encode](https://metacpan.org/pod/Net::IDN::Encode)
-
[Net::IDN::Punycode](https://metacpan.org/pod/Net::IDN::Punycode)
-
[Regexp::Assemble::Compressed](https://metacpan.org/pod/Regexp::Assemble::Compressed)
-
The [Public Suffix List](http://publicsuffix.org/list/).

# CHANGES

- Added extra _prefix_ and _name_ fields to output to separate the actual registered part of the domain from subdomains (or things like _www_).
- Updated with latest version of the public suffix list.
- Added a bunch of new TLDs (nTLDs).