% 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" . )
中得到这种输出?
答案 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,其余字符串缓冲区中可以有任何字节。