can't overstate how nice raku is, bit sharper learning curve but still
raku: ^ ( \d+ <?{ $/ <= 255 }> ) ** 4 % '.' $
slow raku: ^ ( @(0..255) ) ** 4 % '.' $
rulex: <% ( :( range '0'-'255' ) '.' ){3} :( range '0'-'255' ) %>
regex: ^(?:(0|1[0-9]{0,2}|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?|[3-9][0-9]?)\.)((0|1[0-9]{0,2}|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?|[3-9][0-9]?))$
first one running code in the middle of the regex, to see if it matches a mathematical property, the second, running code to generate a [0|1|2|3|...|254|255] equivalent, which also matches as tightly as the rulex/regex code (e.g. no 00 allowed)