首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl中的包(“C4”,$digits)

perl中的包(“C4”,$digits)
EN

Stack Overflow用户
提问于 2011-06-12 12:14:18
回答 2查看 719关注 0票数 0

在用Perl编写CGI应用程序时,有下面的代码来记录访问者。

代码语言:javascript
复制
(my $digits = #ENV{'REMOTE_ADDR'}) =~ s/\.//g;
my $address = pack("C4", $digits);

在perldoc,

包模板,列表

"C4“应该是模板。这到底意味着什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-12 12:17:42

请阅读您提到的pack文档。C的模板是:

代码语言:javascript
复制
C  An unsigned char (octet) value.

所以C4是四个未签名的字符。

票数 2
EN

Stack Overflow用户

发布于 2011-06-12 12:34:01

例如,您的代码看起来就像代码中错误的摘录,将虚线-四元格式的IP地址转换为一个由四个字节组成的字符串,可以传递给socket调用。

假设#ENV$ENV的一个错误,您的代码从虚线四边形中去掉点,给出一个4到12位数字的字符串。然后(隐式地)将这些数字解释为一个整数,在结果的第一个字节中放置最小的8位,然后用零填充其余的数字(因为pack为三个缺失的list元素提供了空值,然后将其解释为零)。

为什么要将二进制IP地址打印到日志文件中,我不会尝试猜测。但给出的代码几乎是胡说八道。如果您确实需要一个二进制IP地址,我建议您

代码语言:javascript
复制
use Socket 'inet_aton';
my $address = inet_aton($ENV{REMOTE_ADDR});
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6321872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档