in reply to Re^2: Module to get domain name from hostname
in thread Module to get domain name from hostname

If you have stripped away the TLD, the last non-dot characters are the domain name. Most likely, a regular expression is enough:

my $tld = public_suffix($hostname) or die "Invalid TLD found in '$hostname'"; $hostname =~ /([^.]+).\Q$tld\E$/ or die "Couldn't find domain name in '$hostname'"; my $domainname= $1; print "Domain name is $domainname.$tld\n";

Replies are listed 'Best First'.
Re^4: Module to get domain name from hostname
by gatkins (Initiate) on Jan 29, 2015 at 16:10 UTC

    Thanks, that does the job.
    I have found another way, just now, using Domain::PublicSuffix

    Both methods work well, thanks again!

Re^4: Module to get domain name from hostname
by gatkins (Initiate) on Jan 29, 2015 at 19:19 UTC
    Using <STDIN> works (perl b3.pl < host.txt), but i prefer to run the script without writing the external file into the terminal.
Re^4: Module to get domain name from hostname
by gatkins (Initiate) on Jan 29, 2015 at 19:12 UTC
    root@sugzum:~/host# cat b2.pl #!/usr/bin/perl use feature qw(say); use Mozilla::PublicSuffix qw(public_suffix); open F, &quot;<host.txt&quot; or die $!; while (<F>) { $hostname = &quot;$_&quot;; } close F; my $tld = public_suffix($hostname) or die &quot;Invalid TLD found in '$hostname'&quot;; $hostname =~ /([^.]+).\Q$tld\E$/ or die &quot;Couldn't find domain name in '$hostname'&quot;; my $domainname= $1; print &quot;Domain name is $domainname.$tld\n&quot;; root@sugzum:~/ssh2smtp# cat host.txt 200-206-30-98.customer.tdatabrasil.net.br root@sugzum:~/ssh2smtp# perl b2.pl Invalid TLD found in '200-206-30-98.customer.tdatabrasil.net.br ' at b2.pl line 9.

    Sorry, I'm a beginner. I can't figure it out to understand how this works.

      Your string $hostname still has the newline at the end of it, which is why the error message shows on two lines:

      Invalid TLD found in '200-206-30-98.customer.tdatabrasil.net.br ' at b2.pl line 9.

      Remove all whitespace from the end of $hostname after you've read it from the file:

      $hostname =~ s/\s+$//;

      That way, the call to public_suffix() should succeed.

        Thanks for the help. It works as it should.
Re^4: Module to get domain name from hostname
by gatkins (Initiate) on Jan 29, 2015 at 17:17 UTC
    I'm experiencing another issue now. How can I get this script to read $hostname variable from host.txt? Tried several solutions, but none worked. I could use $ARGV[0]; but it doesn't suit my needs. I need it to read the hostname from an external file. Thank you!

      So, what did you try, and how did it fail?

      Maybe see open, readline (or <>, the "diamond operator"), or perlvar on @ARGV.