骆驼书建议V字符串可用于表示IPv4地址:
$ipaddr = 204.148.40.9; # the IPv4 address of oreilly.com
但perldata关于版本字符串的主题说明:
请注意,使用IPv4的v字符串 除非您,否则地址不可移植 也使用inet_aton()/ inet_ntoa() 套接字包的例程。
我有两个问题:
1)为什么使用V字符串不便携?
2)将ip-address从点分表示转换为整数的“标准”方法是什么?似乎unpack "N", <v-string>
有时可能会导致问题。
答案 0 :(得分:5)
获取编码形式的“标准”方式是inet_aton
,它处理虚线的IP地址和主机名 - 但你需要它做什么?通常情况下,最好的想法就是跳过处理这些事情和使用的所有低级接口,例如IO :: Socket。
如果你想要转换为 integer ,就像你说的那样,而不是套接字函数所期望的形式(它们在C中是类似的概念,但在Perl中则不那么重要),那么你可以继续使用pack
就好了,只要你是一致的 - 不可移植的部分是套接字函数接受的格式。例如,unpack "N", pack "C4", split /\./, "1.2.3.4"
将为您提供该地址的一个很好的无符号大端表示形式(格式为16909060 == 0x01020304
)。