对pack函数的疑问

我用这个例子

代码1
$a=pack("H*","abcd","efgh");
$b=unpack("H*",$a);
print $b;

代码2
$a=pack("H*","abcd");
$b=unpack("H*",$a);
print $b;

代码1和代码2的输出都是  abcd
有些疑惑 求教


QUOTE:
原帖由 jyf1987 于 2008-3-3 20:06 发表
我用这个例子

代码1
$a=pack("H*","abcd","efgh");
$b=unpack("H*",$a);
print $b;

代码2
$a=pack("H*","abcd");
$b=unpack("H*",$a);
print $b;

代码1和代码2的输出都是  abcd
有些疑惑 求教

$a = pack("H*", "abcd", "efgh"); 事实上只是pack了"abcd",因为"*"很贪婪,"H*"吃掉了"abcd",而之后的"efgh"就没机会匹配了。

pack/unpack的用法比较诡异,所以Perl专门搞了一篇Tutorial来解释,nnd,不仔细研究一番还真用不出来,这玩意简直就是一门微型语言。
我发现那个解说文里拿i举例的时候又可以用两个整数
pack("i*",101,202);
这样的后面那个202也能pack进去
是不是 pack函数对于字符串是把一个字符串当一个数组?
就像c那样
H*只吃进一个变量,i*可以尽量吃


QUOTE:
原帖由 jyf1987 于 2008-3-3 20:37 发表
我发现那个解说文里拿i举例的时候又可以用两个整数
pack("i*",101,202);
这样的后面那个202也能pack进去
是不是 pack函数对于字符串是把一个字符串当一个数组?
就像c那样

你要注意看文档啦..还有要去想一下H、A、I、C...到底是什麽东西....不然转出来跟你想的不一样..也是正常的...

pack/unpack的时候..要注意你要pack的内容的型别..是不是跟你写的型别一致...

你用H*..後面却给他digital或string..不是hex格式.....当然出来的跟你预期的就不一样了....

至於H*与i*的行为不同....我个人认为 这是perl 比较奇怪的地方....

H*认为你後面只有一个是Hex的变量, 因为Hex的数字可以写得很长........

要增加两个变量..你就必须写两次 H*H*..这样表示两个Hex数...

而i後面则认为你有很多个数字...因为integer是有boundary的..

懂了吗?