2010-11-23 63 views
3

骆驼书表明,V-字符串可以用于表示IPv4地址:我可以使用v字符串作为IPv4地址吗?

$ipaddr = 204.148.40.9; # the IPv4 address of oreilly.com 

perldata的版本字符串的主题声明:

需要注意的是使用V-字符串的IPv4 地址是不可移植的,除非你的 也使用Socket包的inet_aton()/ inet_ntoa() 例程。

我有两个问题:

1)为什么是使用V-串不可移植?
2)将IP地址从虚线符号转换为整数的“标准”方式是什么?似乎unpack "N", <v-string>有时可能会导致问题。

回答

5

获得编码形式的“标准”方式是inet_aton,它处理虚线IP地址以及主机名 - 但您需要什么?通常,最好的办法是跳过所有处理这些事情和使用的低级接口,例如IO :: Socket。

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

相关问题