核心模块 Devel::Peek 允许我们以C语言的角度来观察一个perl 标量。
数组的源代码定义为
struct xpvav {
char* xav_array; /* pointer to first array element */
SSize_t xav_fill; /* Index of last element present */
SSize_t xav_max; /* max index for which array has space */
IV xof_off; /* ptr is incremented by offset */
NV xnv_nv; /* numeric value, if any */
MAGIC* xmg_magic; /* magic for scalar array */
HV* xmg_stash; /* class package */
SV** xav_alloc; /* pointer to malloced string */
SV* xav_arylen;
U8 xav_flags;
};
试着运行命令查看啊
C:\Users>perl -MDevel::Peek -le "@a=(1,2,3); Dump(\@a)"
SV = IV(0x74bed0) at 0x74bed4
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x26cf97c
SV = PVAV(0x74cc38) at 0x26cf97c
REFCNT = 2
FLAGS = ()
ARRAY = 0x26bf5dc
FILL = 2
MAX = 3
ARYLEN = 0x0
FLAGS = (REAL)
Elt No. 0
SV = IV(0x74bda0) at 0x74bda4
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 1
Elt No. 1
SV = IV(0x74be70) at 0x74be74
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 2
Elt No. 2
SV = IV(0x74beb0) at 0x74beb4
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 3