print "$_ => ", extract($_)//'invalid', "\n" for qw/ xxx x.x.x x12x..x x123x...x x1x2x...x x123x.x.x x12x1x ax1x2xbx34x56xc /; sub extract { my ($x) = shift=~/(x.*x.*x)/; return unless length($x)%2 && substr($x,(length($x)-1)/2,1) eq 'x'; return $x; } __END__ xxx => xxx x.x.x => x.x.x x12x..x => x12x..x x123x...x => x123x...x x1x2x...x => x1x2x...x x123x.x.x => x123x.x.x x12x1x => invalid ax1x2xbx34x56xc => x1x2xbx34x56x