作者gugod (gg)
看板perl
标题Re: [问题] 关於字元
时间Mon Jun 18 12:04:48 2007
※ 引述《wnick (浅龙勿用)》之铭言:
: ※ 引述《DarkKiller (System hacked)》之铭言:
: : $ perl -MSocket -e 'print inet_ntoa("\x01\x02\x03\x04"), "\n";'
: : 1.2.3.4
: : ==
: : 有专门处理的函数...
: 我大概懂了
: 只是现在我要如何把它转变成v-string呢
: 因为原本UNPACK是用H8产生8c8615c4
可以不用太理会 v-string 的部份, 因为以後的 Perl 会把这个东西丢掉 .
不过,关於它的定义,请找 perldata 里的 "Version String" 一节
简单的说,就是写成这样的字面值:
v1.2.3.4
原本的目的是拿来做版号,直接印出来便可以知道它是在做啥:
print v65.66.67;
# 印出 "ABC"
也就是说,它其实是在定义字串,并且用 "." 来分隔每个字元,事实上不需要
前面的 v 也可以:
print 65.66.67; # ABC
Socket 模组里面,inet_ntoa 的用法就是要你放一个这样的字串,不用括号:
$a = inet_ntoa(140.112.90.72)
但这样之後的 $a 是 "140.112.90.72", 140.112.90.72 是 4 个 character,
"140.112.90.72" 则是 13 个 character。你也可以用这种方法得到同样的效果:
$a = inet_ntoa("\x{8c}pZH");
所以... 说穿了 v-string 还是一个字串,只是不用写括号,但中间要用 . 分隔
每个字元,并且每个字元要用它的 ord() 值表示,所以:
print 12549.12550.12551.12552;
这样子就可以印出
ㄅㄆㄇㄈ
当然这个 v-string 并不会落在 IPv4 的范围里就是了
Cheers,
Kang-min Liu
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.22.54.223
1F:推 JonathanWang:请问「以後的version」是指 perl 6 吗? @_@ 06/19 12:24
2F:→ gugod:指的是 5.8 之後的 Perl (5.9, 5.10, ...) 06/25 02:06