2010-11-23 61 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)。

相關問題