IO::Socket::SSL::PublicSuffix(3) User Contributed Perl Documentation IO::Socket::SSL::PublicSuffix(3)

# [NAME](#NAME)

IO::Socket::SSL::PublicSuffix - provide access to Mozilla's list of effective TLD names

# [SYNOPSIS](#SYNOPSIS)

```
    # use builtin default
    use IO::Socket::SSL::PublicSuffix;
    $ps = IO::Socket::SSL::PublicSuffix->default;
    # load from string
    $ps = IO::Socket::SSL::PublicSuffix->from_string("*.uk\n*");
    # load from file or file handle
    $ps = IO::Socket::SSL::PublicSuffix->from_file($filename);
    $ps = IO::Socket::SSL::PublicSuffix->from_file(\*STDIN);
    # --- string in -> string out
    # $rest -> whatever.host
    # $tld  -> co.uk
    my ($rest,$tld) = $ps->public_suffix('whatever.host.co.uk');
    my $tld = $ps->public_suffix('whatever.host.co.uk');
    # $root_domain -> host.co.uk
    my $root_domain = $ps->public_suffix('whatever.host.co.uk', 1);
    # --- array in -> array out
    # $rest -> [qw(whatever host)]
    # $tld  -> [qw(co uk)]
    my ($rest,$tld) = $ps->public_suffix([qw(whatever host co uk)]);
 ----
    # To update this file with the current list:
    perl -MIO::Socket::SSL::PublicSuffix -e 'IO::Socket::SSL::PublicSuffix::update_self_from_url()'
```

# [DESCRIPTION](#DESCRIPTION)

This module uses the list of effective top level domain names from the mozilla project to determine the public top level domain for a given hostname.

## [Method](#Method)

[class-&gt;default(%args)](#class)

Returns object with builtin default. "min\_suffix" can be given in %args to specify the minimal suffix, default is 1.

[class-&gt;from\_string(string,%args)](#class~2)

Returns object with configuration from string. See method "default" for %args.

[class-&gt;from\_file( file name| file handle, %args )](#class~3)

Returns object with configuration from file or file handle. See method "default" for %args.

$self-&gt;public\_suffix( $host|\\@host, \[ $add ] )

In array context the function returns the non-tld part and the tld part of the given hostname, in scalar context only the tld part. It adds $add parts of the non-tld part to the tld, e.g. with "$add=1" it will return the root domain.

If there were no explicit matches against the public suffix configuration it will fall back to a suffix of length 1.

The function accepts a string or an array-ref (e.g. host split by "."). In the first case it will return string(s), in the latter case array-ref(s).

International hostnames or labels can be in ASCII (IDNA form starting with "xn--") or unicode. In the latter case an IDNA handling library needs to be available. URI is preferred, but Net::IDN:::Encode, Net::LibIDN are still supported.

($self|class)-&gt;can\_idn

Returns true if IDN support is available.

# [FILES](#FILES)

http://publicsuffix.org/list/effective\_tld\_names.dat

# [SEE ALSO](#SEE_ALSO)

Domain::PublicSuffix, Mozilla::PublicSuffix

# [BUGS](#BUGS)

```
 Q: Why yet another module, we already have L<Domain::PublicSuffix> and
    L<Mozilla::PublicSuffix>.
 A: Because the public suffix data change more often than these modules do,
    IO::Socket::SSL needs this list and it is more easy this way to keep it
    up-to-date.
```

# [AUTHOR](#AUTHOR)

Steffen Ullrich

2026-07-07 perl v5.42.2

---

Document: IO::Socket::SSL::PublicSuffix(3pm) from perl-io-socket-ssl 2.099-r1 (Chainguard OS)
Source: https://github.com/noxxi/p5-io-socket-ssl
