http://www.perlmonks.org?node_id=989015


in reply to getting syntex error in pattern search

Please note that
    my $m = ($s =~ m/(\d{1,3})/);
returns the success (true or false) of the match, and
    my ($d) = $s =~ m/(\d{1,3})/;
returns the captured substring, if any. (And the enclosing parentheses are irrelevant in the  ($s =~ m/(\d{1,3})/) expression in this case.) See perlre, perlretut and perlrequick.

>perl -wMstrict -le "my $s = 'a987b'; my $m = ($s =~ m/(\d{1,3})/); print qq{'$m'}; my ($d) = $s =~ m/(\d{1,3})/; print qq{'$d'}; " '1' '987'

Also, it might be better to use the  $RE{net}{IPv4} regex from Regexp::Common::net (see Regexp::Common as the general interface module) to match the IP.