Kammen van, Marco, Springer SBM NL wrote:
Dear List,

Hello,

I've been struggeling with the following:

#!/usr/bin/perl

use strict;
use warnings;

my $ip = ("127.0.0.255");

if ($ip =~ /127\.0\.0\.[2..254]/) {
   print "IP Matched!\n";;
} else {
   print "No Match!\n";
}

For a reason i don't understand:

127.0.0.1 doesn't match as expected...
Everything between 127.0.0.2 and 127.0.0.299 matches...
127.0.0.230 doesn't match...

What am I doing wrong??

As Rob said [2..254] is a character class that matches one character (so "127.0.0.230" should match also.) You also don't anchor the pattern so something like '765127.0.0.273646' would match as well. What you need is something like this:

#!/usr/bin/perl

use strict;
use warnings;

my $ip = '127.0.0.255';

my $IP_match = qr{
    \A               # anchor at beginning of string
    127\.0\.0\.      # match the literal characters
    (?:
        [2-9]            # match one digit numbers 2 - 9
        |                # OR
        [0-9][0-9]       # match any two digit number
        |                # OR
        1[0-9][0-9]      # match 100 - 199
        |                # OR
        2[0-4][0-9]      # match 200 - 249
        |                # OR
        25[0-4]          # match 250 - 254
    )
    \z               # anchor at end of string
    }x;

if ( $ip =~ $IP_match ) {
  print "IP Matched!\n";;
}
else {
  print "No Match!\n";
}


Or, another way to do it:

#!/usr/bin/perl

use strict;
use warnings;

use Socket;

my $ip = inet_aton '127.0.0.255';

my $start = inet_aton '127.0.0.2';
my $end   = inet_aton '127.0.0.254';


if ( $ip ge $start && $ip le $end ) {
  print "IP Matched!\n";;
}
else {
  print "No Match!\n";
}




John
--
Any intelligent fool can make things bigger and
more complex... It takes a touch of genius -
and a lot of courage to move in the opposite
direction.                   -- Albert Einstein

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to