[ruby/ipaddr] String#split seems to be faster than capturing digits with Regexp

https://github.com/ruby/ipaddr/commit/e0feb0708b
This commit is contained in:
Akira Matsuda 2023-01-07 04:23:10 +09:00 committed by git
parent 32f8ed7afd
commit 6ad52e336d

View File

@ -52,7 +52,7 @@ class IPAddr
# Regexp _internally_ used for parsing IPv4 address.
RE_IPV4ADDRLIKE = %r{
\A
(\d+) \. (\d+) \. (\d+) \. (\d+)
\d+ \. \d+ \. \d+ \. \d+
\z
}x
@ -669,8 +669,8 @@ class IPAddr
when Array
octets = addr
else
m = RE_IPV4ADDRLIKE.match(addr) or return nil
octets = m.captures
RE_IPV4ADDRLIKE.match?(addr) or return nil
octets = addr.split('.')
end
octets.inject(0) { |i, s|
(n = s.to_i) < 256 or raise InvalidAddressError, "invalid address: #{@addr}"