Good input all! Thanks. The comment about stuff not being anchored help me understand why the "throw away the last part of the line" part of the match didn't get the paren following the naive regex pattern (I don't care if it is a valid IP). I had put that '?' non-greedy flag on and with .* an empty string matched. All I had to do was anchor the end with '$'.
That assignement into a list with a capturing /.../ match thing was very interesting. I'm using a goofy while loop to repeatedly capture and the rip off the IP from lines until there is no matching IP pattern, then move on to the next line (while (<>). That assignement using the match looks like I could use it with an array variable on the left and a 'g' on the match to capture all the matching IP's on a given line. I'll try that after coffee.
Thanks again.