【问题标题】:Devel::Peek Question开发::偷看问题
【发布时间】:2011-08-01 06:45:35
【问题描述】:
% 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

23 之间切碎的部分( "12\003" . ) 中的2 个零来自哪里?

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

【问题讨论】:

    标签: perl peek


    【解决方案1】:

    一个错误? "\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?

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

    【讨论】:

    • This is perl 5, version 14, subversion 1 (v5.14.1) built for i686-linux。开发::Peek 版本 = 1.07
    【解决方案2】:

    我在 Windows 上使用 perl 5.12.2 得到与 sid_com 相同的结果。然而,字符串长度无论如何取自结构的CUR 字段。我不明白为什么这应该是一个错误,字符串缓冲区的其余部分可以有任何字节。

    【讨论】:

    • 对我来说,它看起来不是最后一个字符,而是八进制的长度。
    • @sid_com - 但长度只有两个,而不是三个。不过,它可能是偏移量。
    • 当我砍掉 9 个字符时,我得到一个 \t
    • 我接受了 ysth 的回答,因为它更符合 perlguts/Offsets
    • 可能是\t,因为perl -E 'say ord "\t"' = 9。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2023-02-23
    • 2011-01-31
    • 2016-10-12
    相关资源
    最近更新 更多