之前想看一下Perl的实现,无意中搜到了这篇文章,对Perl内部类型的结构解释的很清晰,推荐感兴趣的都仔细看一下,想优化的时候做到心中有数。
接下来的几篇blog将翻译这篇文档中常见类型的部分,做个记录,加深印象,同时也方便大家阅读理解。
PerlGuts Illustrated
直接命令行的方法查看:perl -MDevel::Peek -e "$a = 123; Dump $a"
简单的例子用来查看变量内部结构:
use Devel::Peek;
$a = 123;
@a = 1..10;
%a = 1..10;
Dump $a;
Dump \@a;
Dump \%a;
标量:
SV = IV(0x2410960) at 0x2410964
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 123
数组:
SV = RV(0x3a7190) at 0x3a7184
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x24109c4
SV = PVAV(0x3a80ac) at 0x24109c4
REFCNT = 2
FLAGS = ()
ARRAY = 0x24c1aec
FILL = 9
MAX = 9
ARYLEN = 0x0
FLAGS = (REAL)
Elt No. 0
SV = IV(0x24c0450) at 0x24c0454
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 1
Elt No. 1
SV = IV(0x24c0420) at 0x24c0424
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 2
Elt No. 2
SV = IV(0x24b7e40) at 0x24b7e44
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 3
Elt No. 3
SV = IV(0x24b7e50) at 0x24b7e54
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 4
Hash:
SV = RV(0xe7190) at 0xe7184
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x24aaa0c
SV = PVHV(0x2401c94) at 0x24aaa0c
REFCNT = 2
FLAGS = (SHAREKEYS)
ARRAY = 0x24bd47c (0:3, 1:5)
hash quality = 150.0%
KEYS = 5
FILL = 5
MAX = 7
RITER = -1
EITER = 0x0
Elt "1" HASH = 0x806b80c9
SV = IV(0x24b7ca0) at 0x24b7ca4
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 2
Elt "3" HASH = 0xa400c7f3
SV = IV(0x24b7c80) at 0x24b7c84
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 4
Elt "7" HASH = 0xecc9d984
SV = IV(0x24b7c60) at 0x24b7c64
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 8