in reply to scandns.pl

Greetings, BlueLines.

Great little ditty -- especially in light of the fact it still works, nearly 12yrs. later!

One little nit;
Line 146 (my copy) reads:

return($x==4);
Which issues:
Use of uninitialized value $x in numeric eq (==) at ./scandns.pl line +146. Use of uninitialized value $x in numeric eq (==) at ./scandns.pl line +146.
Changing the offending line to:
return($x);
Seems to squelch the complaint(s), and seemingly without ill.

Just thought I'd mention it, for you, or anyone else pondering it's use. :)

--Chris

#!/usr/bin/perl -Tw
use Perl::Always or die;
my $perl_version = (5.12.5);
print $perl_version;

Replies are listed 'Best First'.
Re^2: scandns.pl
by jdporter (Paladin) on Nov 14, 2013 at 03:10 UTC

    That's stupid. A better, simpler, less logic-assaulting change would be to address the warning message itself, by changing

    my $x;
    to
    my $x=0;
    More to the point, your "fix" completely blows the logic of the code, which attempts to implement the requirement that all four of the octets must be in the range 0..255. Your "fix" would say that an argument of 1.99999.99999.99999 is a valid IP address.

    I reckon we are the only monastery ever to have a dungeon stuffed with 16,000 zombies.
      Right you are jdporter.

      Boy, was I stupid! It would have killed me to take the time to evaluate it. Rather than simply stripping off the offender.

      I'll take more time, before pressing the "create" button, in the future.

      Sorry for the bother, and thanks for calling me on it, jdporter.

      --Chris

      #!/usr/bin/perl -Tw
      use Perl::Always or die;
      my $perl_version = (5.12.5);
      print $perl_version;
      The eval:
      $x++ if(($_>=0)&&($_<=255));
      as I read it, is:
      if the input ($x), is at least 0, and no greater than 255
      $x is legitimate, so return $x

      So as I see it. There is nothing afoul with my proposed solution.

      :)

      --Chris

      #!/usr/bin/perl -Tw
      use Perl::Always or die;
      my $perl_version = (5.12.5);
      print $perl_version;
        as I read it...

        You're reading it wrong.

        $x is counting the number of valid octets. The number of valid octets should be 4, not simply >0. It's fine to return 4 rather than 'true', but it is not fine to return 1 or 2 or 3. The number of the counting shall be 4.

        I reckon we are the only monastery ever to have a dungeon stuffed with 16,000 zombies.
      Greetings jdporter.

      So is you're assignment.

      I take back most of my 1st reply to you.

      If choosing you're assignment. CDIR masks will be rejected:

      % ./scandns.pl 209.197.123.153/29 209.197.123.153 is an invalid address. %
      Using my assignment (correct, or incorrect):
      % ./scandns.pl 209.197.123.153/29 209.197.123.152 => renku.org => 4.79.43.173 209.197.123.153 => perlmonks.pair.com 209.197.123.154 => taidsaccount.com 209.197.123.155 => murphyworld.com => 208.91.197.132 209.197.123.156 => beetz.at 209.197.123.157 => best-kids-bedding-prices-online.com => best-kids-be +dding-prices-online.com has no A record 209.197.123.158 => lowest-prices-for-kids-bedding.com => lowest-prices +-for-kids-bedding.com has no A record 209.197.123.159 => no PTR record %
      Not to sound too much the smart a$$. But before ridiculing someone for trying to help. Perhaps it best to test your own solution first?

      Best wishes.

      --Chris

      #!/usr/bin/perl -Tw
      use Perl::Always or die;
      my $perl_version = (5.12.5);
      print $perl_version;

        I don't know, I think maybe you've made other changes to the code? Because when I run it with that exact argument — 209.197.123.153/29 — I get a result indicating that the IP address is valid.

        I reckon we are the only monastery ever to have a dungeon stuffed with 16,000 zombies.