NAME
Devel::MAT::SV
- represent a single SV from a heap dump
DESCRIPTION
Objects in this class represent individual SV variables found in the arena during a heap dump. Actual types of SV are represented by subclasses, which are documented below.
COMMON METHODS
$type = $sv->type
Returns the major type of the SV. This is the class name minus the Devel::MAT::SV::
prefix.
$desc = $sv->desc
Returns a string describing the type of the SV and giving a short detail of its contents. The exact details depends on the SV type.
$desc = $sv->desc_addr
Returns a string describing the SV as with desc
and giving its address in hex. A useful way to uniquely identify the SV when printing.
$addr = $sv->addr
Returns the address of the SV
$count = $sv->refcnt
Returns the SvREFCNT
reference count of the SV
$count = $sv->refcount_adjusted
Returns the reference count of the SV, adjusted to take account of the fact that the SvREFCNT
value of the backrefs list of a hash or weakly-referenced object is artificially high.
$stash = $sv->blessed
If the SV represents a blessed object, returns the stash SV. Otherwise returns undef
.
$size = $sv->size
Returns the (approximate) size in bytes of the SV
( $type, $sv, $type, $sv, ... ) = $sv->magic
Returns a pair list of magic applied to the SV; each giving the type and target SV.
$av_or_rv = $sv->backrefs
Returns backrefs SV, which may be an AV containing the back references, or if there is only one, the REF SV itself referring to this.
%refs = $sv->outrefs
Returns a name/value list giving names and other SV objects for each of the SVs that this one refers to, either directly by strong or weak reference, indirectly via RV, or inferred by Devel::MAT
itself.
%refs = $sv->outrefs_strong
Returns the subset of outrefs
that are direct strong references.
%refs = $sv->outrefs_weak
Returns the subset of outrefs
that are direct weak references.
%refs = $sv->outrefs_direct
Returns the subset of outrefs
that are direct strong or weak references.
%refs = $sv->outrefs_indirect
Returns the subset of outrefs
that are indirect references via RVs.
%refs = $sv->outrefs_inferred
Returns the subset of outrefs
that are not directly stored in the SV structure, but instead inferred by Devel::MAT
itself.
IMMORTAL SVs
Three special SV objects exist outside of the heap, to represent undef
and boolean true and false. They are
Devel::MAT::SV::UNDEF
Devel::MAT::SV::YES
Devel::MAT::SV::NO
Devel::MAT::SV::GLOB
Represents a glob; an SV of type SVt_PVGV
.
$file = $gv->file
$line = $gv->line
$location = $gv->location
Returns the filename, line number, or combined location (FILE line LINE
) that the GV first appears at.
$stash = $gv->stash
Returns the stash to which the GV belongs.
$sv = $gv->scalar
$av = $gv->array
$hv = $gv->hash
$cv = $gv->code
$gv = $gv->egv
$io = $gv->io
$form = $gv->form
Return the SV in the various glob slots.
Devel::MAT::SV::SCALAR
Represents a non-referential scalar value; an SV of any of the types up to and including SVt_PVMV
(that is, IV
, NV
, PV
, PVIV
, PVNV
or PVMG
). This includes all numbers, integers and floats, strings, and dualvars containing multiple parts.
$uv = $sv->uv
Returns the integer numeric portion as an unsigned value, if valid, or undef
.
$iv = $sv->iv
Returns the integer numeric portion as a signed value, if valid, or undef
.
$nv = $sv->nv
Returns the floating numeric portion, if valid, or undef
.
$pv = $sv->pv
Returns the string portion, if valid, or undef
.
$pvlen = $sv->pvlen
Returns the length of the string portion, if valid, or undef
.
$str = $sv->qq_pv( $maxlen )
Returns the PV string, if defined, suitably quoted. If $maxlen
is defined and the PV is longer than this, it is truncated and ...
is appended after the containing quote marks.
$stash = $sv->ourstash
Returns the stash of the SCALAR, if it is an 'our
' variable.
Devel::MAT::SV::REF
Represents a referential scalar; any SCALAR-type SV with the SvROK
flag set.
$svrv = $sv->rv
Returns the SV referred to by the reference.
$weak = $sv->is_weak
Returns true if the SV is a weakened RV reference.
$stash = $sv->ourstash
Returns the stash of the SCALAR, if it is an 'our
' variable.
Devel::MAT::SV::ARRAY
Represents an array; an SV of type SVt_PVAV
.
$unreal = $av->is_unreal
Returns true if the AvREAL()
flag is not set on the array - i.e. that its SV pointers do not contribute to the SvREFCNT
of the SVs it points at.
$backrefs = $av->is_backrefs
Returns true if the array contains the backrefs list of a hash or weakly-referenced object.
@svs = $av->elems
Returns all of the element SVs in a list
$sv = $av->elem( $index )
Returns the SV at the given index
Devel::MAT::SV::PADLIST
A subclass of ARRAY, this is used to represent the PADLIST of a CODE SV.
Devel::MAT::SV::PADNAMES
A subclass of ARRAY, this is used to represent the PADNAMES of a CODE SV.
$padname = $padnames->padname( $padix )
Returns the name of the lexical at the given index, or undef
Devel::MAT::SV::PAD
A subclass of ARRAY, this is used to represent a PAD of a CODE SV.
( $name, $sv, $name, $sv, ... ) = $pad->lexvars
Returns a name/value list of the lexical variables in the pad.
Devel::MAT::SV::HASH
Represents a hash; an SV of type SVt_PVHV
. The Devel::MAT::SV::STASH
subclass is used to represent hashes that are used as stashes.
@keys = $hv->keys
Returns the set of keys present in the hash, as plain perl strings, in no particular order.
$sv = $hv->value( $key )
Returns the SV associated with the given key
@svs = $hv->values
Returns all of the SVs stored as values, in no particular order.
Devel::MAT::SV::STASH
Represents a hash used as a stash; an SV of type SVt_PVHV
whose HvNAME()
is non-NULL. This is a subclass of Devel::MAT::SV::HASH
.
$hv = $stash->mro_linear_all
$sv = $stash->mro_linearcurrent
$sv = $stash->mro_nextmethod
$av = $stash->mro_isa
Returns the fields from the MRO structure
$name = $stash->stashname
Returns the name of the stash
Devel::MAT::SV::CODE
Represents a function or closure; an SV of type SVt_PVCV
.
$stash = $cv->stash
$gv = $cv->glob
$filename = $cv->file
$line = $cv->line
$scope_cv = $cv->scope
$av = $cv->padlist
$sv = $cv->constval
$addr = $cv->oproot
Returns the stash, glob, filename, line number, scope, padlist, constant value or oproot of the code.
$location = $cv->location
Returns FILE line LINE
if the line is defined, or FILE
if not.
$clone = $cv->is_clone
$cloned = $cv->is_cloned
$xsub = $cv->is_xsub
$weak = $cv->is_weakoutside
$rc = $cv->is_cvgv_rc
Returns the CvCLONE()
, CvCLONED()
, CvISXSUB()
, CvWEAKOUTSIDE()
and CvCVGV_RC()
flags.
$protosub = $cv->protosub
Returns the protosub CV, if known, for a closure CV.
@svs = $cv->constants
Returns a list of the SVs used as constants or method names in the code. On ithreads perl the constants are part of the padlist structure so this list is constructed from parts of the padlist at loading time.
@svs = $cv->globrefs
Returns a list of the SVs used as GLOB references in the code. On ithreads perl the constants are part of the padlist structure so this list is constructed from parts of the padlist at loading time.
$name = $cv->padname( $padix )
Returns the name of the $padix'th lexical variable, or undef
if it doesn't have a name
$padnames = $cv->padnames
Returns the AV reference directly which stores the pad names.
@pads = $cv->pads
Returns a list of the actual pad AVs.
$pad = $cv->pad( $depth )
Returns the PAD at the given depth
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>