Devel :: Peek问题

时间:2011-08-01 06:45:35

标签: perl peek

% perl -Ilib -MDevel::Peek -le '$a="34567"; $a=~s/...//; Dump($a)' 
SV = PV(0x8171048) at 0x8186f48   # replaced "12345" with "34567"
  REFCNT = 1
  FLAGS = (POK,OOK,pPOK)
  OFFSET = 3
  PV = 0x8181bdb ( "34\003" . ) "67"\0
  CUR = 2
  LEN = 9

( "12\003" . )2之间的chomped part 3中的2个零来自哪里?

为什么我在chomped part ( "34\003" . )中得到这种输出?

2 个答案:

答案 0 :(得分:2)

一个错误? “\ 003”是八进制形式的chr(3)。但是:

$ perl -Ilib -MDevel::Peek -le '$a="12345"; $a=~s/...//; Dump($a)'
SV = PVIV(0x869b0bc) at 0x86a5060
  REFCNT = 1
  FLAGS = (POK,OOK,pPOK)
  IV = 3  (OFFSET)
  PV = 0x869fac3 ( "123" . ) "45"\0
  CUR = 2
  LEN = 5

我不能复制那个;您使用的是什么版本的perl?

请注意,()中字符串缓冲区的一部分是保留的,但当前未使用。

答案 1 :(得分:1)

我在Windows上使用perl 5.12.2获得与sid_com相同的结果。但是,字符串长度无论如何都取自CUR结构域。我不明白为什么这应该是一个bug,其余字符串缓冲区中可以有任何字节。