我可以将v字符串用于IPv4地址吗?

Eug*_*ash 3 perl ip-address

骆驼书建议V字符串可用于表示IPv4地址:

$ipaddr = 204.148.40.9;   # the IPv4 address of oreilly.com
Run Code Online (Sandbox Code Playgroud)

但是关于版本字符串主题的perldata指出:

请注意,除非您还使用Socket包的inet_aton()/ inet_ntoa()例程,否则使用IPv4地址的v字符串是不可移植的.

我有两个问题:

1)为什么使用v-strings不便携?
2)将ip-address从点分表示转换为整数的"标准"方法是什么?似乎unpack "N", <v-string>有时可能会导致问题.

hob*_*bbs 5

获取编码形式的"标准"方法是inet_aton处理虚线IP地址和主机名 - 但您需要它做什么?通常情况下,最好的想法是跳过所有处理此类事情和使用的低级接口,例如IO :: Socket.

如果你想要转换为整数,就像你说的那样,而不是套接字函数所期望的形式(它们在C中是类似的概念,但在Perl中则不那么),那么你可以继续使用pack就好了因为你是一致的 - 不可移植的部分是套接字函数接受的格式.例如,unpack "N", pack "C4", split /\./, "1.2.3.4"将为您提供该地址的一个很好的无符号大端表示形式(以数字16909060 ==的形式0x01020304).