我正在尝试学习 Perl,我想知道在下面的代码中是否有更好的等价于 map()
来生成一个包含四个整数(假 IP 地址)的列表:
map(int(rand(155) + 100), (0,0,0,0))
在 Python 中我会这样做
[int(random.randrange(100, 255)) for _ in range(4)]
虽然我相当确定还有更好的方法来做到这一点。
最佳答案
IPv4 地址只是一个 32 位整数,所以我会使用
unpack('C4', pack('N' int(rand(2**32))))
(这不会将每个八位字节限制为 100..255,但这样做毫无意义。)
请注意,某些系统的 rand
的熵小于 32 位
>perl -V:randbits
randbits='15';
在那些系统上,如果您使用 rand
,您的代码将不可能返回一些 IP 地址(无论您使用什么技术)。在示例系统中,rand
只能返回4,294,967,296个地址中的32,768个。
CPAN 上的库提供了更多熵的随机数生成器。
关于python - Perl 中的隐式循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498884/