Devel::Peek の出力の読み方
Devel::Peek::Dump の出力はこういう風になっているわけですが
SV = IV(0xedb740) at 0xedb748
REFCNT = 2
FLAGS = (PADMY,IOK,pIOK)
IV = 1
さて、"IV(0xedb740) at 0xedb748" ってなんだ? ってなるわけです。
"IV(0xedb740)" のアドレスは、sv_any のアドレスで、0xedb748 の方は SV そのもののアドレスです。
なお、struct sv は疑似コードでいうと以下のような構造になっています。
template <class T>
struct SV {
T sv_any; // 値本体へのポインタ
uint32_t sv_refcnt; // リファレンスカウント
uint32_t sv_flags; // フラッグ
union {
char *svu_pv;
IV svu_iv;
UV svu_uv;
SV* svu_rv;
SV** svu_array;
HE** svu_hash;
PerlIO* svu_fp;
} sv_union_t;
}
Published: 2012-03-26(Mon) 10:30