With my usual timeliness I've taken up attempting to getting Net::XWhois to behave. My local whois server returns output in this format:
Domain: myDomain.int DNS: myDomain.int Registered: 2013-05-17 Expires: 2023-05-31 Registration period: 1 year VID: no DNSSEC: Unsigned delegation, DNSSEC disabled, no records Status: Active Registrant Handle: ***N/A*** Name: myName Corp Attention: Reggie Person Address: SomeStreet 17 Postalcode: numericZip City: myCity Country: XX Phone: +12 34 56 78 90 Nameservers Hostname: ns1.dom.ext Hostname: ns2.dom.ext Hostname: ns3.dom.ext
So, in order to handle this particular format I've registered a parser (using Net::XWhois::register_parser())) and also an association (Net::XWhois::register_association()) in the hopes that this would work.

According to the source (https://metacpan.org/dist/Net-XWhois/source/lib/Net/XWhois.pm#L660), the re's in the parser definition are called with the /sg modifiers.

So, off to an on-line regex tester to see if my idea would work: https://regex101.com/r/koIpfH/1

Great, so far, so good.

Then I created a small script in order to avoid "hammering" the local whois server:

#!/bin/perl use re 'debug'; my $regexp='(?:Nameservers[^\n]*\n.*?)*(?>Hostname:\s+([\S]+)\n)'; my $resp = " Domain: myDomain.int DNS: myDomain.int Registered: 2013-05-17 Expires: 2023-05-31 Registration period: 1 year VID: no DNSSEC: Unsigned delegation, DNSSEC disabled, no records Status: Active Registrant Handle: ***N/A*** Name: myName Corp Attention: Reggie Person Address: SomeStreet 17 Postalcode: numericZip City: myCity Country: XX Phone: +12 34 56 78 90 Nameservers Hostname: ns1.dom.ext Hostname: ns2.dom.ext Hostname: ns3.dom.ext "; # my $regexp = shift; if ( $regexp !~ /^CODE/ ) { my @caps = $resp =~ /$regexp/sg; print "\n\n"; print "caps\n",join(',',@caps),"\n"; }else{ print "IS code\n"; exit; }
However, I seem to have missed something since I can't get the exact same regex to work in my parser definition :-(

Therefore, I beseech the monastary, I'm in need of elucidation. Here's my parser definition etc.:

my $w = new Net::XWhois( Server => 'whois.int'); $w->register_parser ( Name => 'PDEF', Retain => 0, Parser => { name => 'Domain:\s+(\S+)\n', dnsname => 'DNS\s+(\S+)\n', nameservers => '(?:Nameservers[^\n]*\n.*?)*(?>Hostname:\s+ +([\S]+)\n)', registrant => '(?:[rR]egistrant)[^\n]*\n([\n\s\S]*?)[\n\r +\f]{2}', status => 'Status:\s+(.*?)\n', remarks => '(DNSSEC:.*?)\n', reg_date => '[rR]egistered:\s+(.*?)\n', reg_period => '[rR]egist.*?[pP]eriod:\s+(.*?)\n', exp_date => '[eE]xpires\s+(.*?)\n', }, ); $w->register_association ( 'whois.int' => [ PDEF, [ qw/int/ ] ] ); $w->lookup ( Domain => '--show-handles --charset=utf-8 '."myDomain.int +" );

In reply to /re/ issue - hacking Net::XWhois by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.