之前想看一下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