Devel :: Peek Question - PullRequest
       16

Devel :: Peek Question

1 голос
/ 01 августа 2011
% 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

Откуда взялись 2 нуля в дробленой детали ( "12\003" . ) между 2 и 3?

Почему я получаю такой вывод в дробной части ( "34\003" . )?

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

ошибка?«\ 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 голос
/ 01 августа 2011

Я получаю тот же результат, что и sid_com, используя perl 5.12.2 для Windows.Однако длина строки в любом случае берется из поля структуры CUR.Я не понимаю, почему это должно быть ошибкой, в оставшейся части строкового буфера могут быть любые байты.

...