B
B - The Perl Compiler
use B;
The B module supplies classes which allow a Perl program to delve
into its own innards. It is the module used to implement the
``backends'' of the Perl compiler. Usage of the compiler does not
require knowledge of this module: see the O module for the
user-visible part. The B module is of use to those who want to
write new compiler backends. This documentation assumes that the
reader knows a fair amount about perl's internals including such
things as SVs, OPs and the internal symbol table and syntax tree
of a program.
The C structures used by Perl's internals to hold SV and OP
information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
class hierarchy and the B module gives access to them via a true
object hierarchy. Structure fields which point to other objects
(whether types of SV or types of OP) are represented by the B
module as Perl objects of the appropriate class. The bulk of the B
module is the methods for accessing fields of these structures. Note
that all access is read-only: you cannot modify the internals by
using this module.
B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM, B::PVLV,
B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes correspond in
the obvious way to the underlying C structures of similar names. The
inheritance hierarchy mimics the underlying C ``inheritance''. Access
methods correspond to the underlying C macros for field access,
usually with the leading ``class indication'' prefix removed (Sv, Av,
Hv, ...). The leading prefix is only left in cases where its removal
would cause a clash in method name. For example, GvREFCNT stays
as-is since its abbreviation would clash with the ``superclass'' method
REFCNT (corresponding to the C function SvREFCNT).
- REFCNT
- FLAGS
- IV
-
Returns the value of the IV, interpreted as
a signed integer. This will be misleading
if
FLAGS & SVf_IVisUV. Perhaps you want the
int_value method instead?
- IVX
- UVX
- int_value
-
This method returns the value of the IV as an integer.
It differs from
IV in that it returns the correct
value regardless of whether it's stored signed or
unsigned.
- needs64bits
- packiv
- NV
- NVX
- RV
- PV
-
This method is the one you usually want. It constructs a
string using the length and offset information in the struct:
for ordinary scalars it will return the string that you'd see
from Perl, even if it contains null characters.
- RV
-
Same as B::RV::RV, except that it will
die() if the PV isn't
a reference.
- PVX
-
This method is less often useful. It assumes that the string
stored in the struct is null-terminated, and disregards the
length information.
-
It is the appropriate method to use if you need to get the name
of a lexical variable from a padname array. Lexical variable names
are always stored with a null terminator, and the length field
(SvCUR) is overloaded for other purposes and can't be relied on here.
- MAGIC
- SvSTASH
- MOREMAGIC
- precomp
-
Only valid on r-magic, returns the string that generated the regexp.
- PRIVATE
- TYPE
- FLAGS
- OBJ
-
Will
die() if called on r-magic.
- PTR
- REGEX
-
Only valid on r-magic, returns the integer value of the REGEX stored
in the MAGIC.
- TARGOFF
- TARGLEN
- TYPE
- TARG
- USEFUL
- PREVIOUS
- RARE
- TABLE
- is_empty
-
This method returns TRUE if the GP field of the GV is NULL.
- NAME
- SAFENAME
-
This method returns the name of the glob, but if the first
character of the name is a control character, then it converts
it to ^X first, so that *^G would return ``^G'' rather than ``\cG''.
-
It's useful if you want to print out the name of a variable.
If you restrict yourself to globs which exist at compile-time
then the result ought to be unambiguous, because code like
${"^G"} = 1 is compiled as two ops - a constant string and
a dereference (rv2gv) - so that the glob is created at runtime.
-
If you're working with globs at runtime, and need to disambiguate
*^G from *{``^G''}, then you should use the raw NAME method.
- STASH
- SV
- IO
- FORM
- AV
- HV
- EGV
- CV
- CVGEN
- LINE
- FILE
- FILEGV
- GvREFCNT
- FLAGS
- LINES
- PAGE
- PAGE_LEN
- LINES_LEFT
- TOP_NAME
- TOP_GV
- FMT_NAME
- FMT_GV
- BOTTOM_NAME
- BOTTOM_GV
- SUBPROCESS
- IoTYPE
- IoFLAGS
- IsSTD
-
Takes one arguments ( 'stdin' | 'stdout' | 'stderr' ) and returns true
if the IoIFP of the object is equal to the handle whose name was
passed as argument ( i.e. $io->
IsSTD('stderr') is true if
IoIFP($io) == PerlIO_stdin() ).
- FILL
- MAX
- OFF
- ARRAY
- AvFLAGS
- STASH
- START
- ROOT
- GV
- FILE
- DEPTH
- PADLIST
- OUTSIDE
- XSUB
- XSUBANY
-
For constant subroutines, returns the constant SV returned by the subroutine.
- CvFLAGS
- const_sv
- FILL
- MAX
- KEYS
- RITER
- NAME
- PMROOT
- ARRAY
B::OP, B::UNOP, B::BINOP, B::LOGOP, B::LISTOP, B::PMOP,
B::SVOP, B::PADOP, B::PVOP, B::CVOP, B::LOOP, B::COP.
These classes correspond in
the obvious way to the underlying C structures of similar names. The
inheritance hierarchy mimics the underlying C ``inheritance''. Access
methods correspond to the underlying C structre field names, with the
leading ``class indication'' prefix removed (op_).
- next
- sibling
- name
-
This returns the op name as a string (e.g. ``add'', ``rv2av'').
- ppaddr
-
This returns the function name as a string (e.g. ``PL_ppaddr[OP_ADD]'',
``PL_ppaddr[OP_RV2AV]'').
- desc
-
This returns the op description from the global C PL_op_desc array
(e.g. ``addition'' ``array deref'').
- targ
- type
- seq
- flags
- private
- first
- last
- other
- children
- pmreplroot
- pmreplstart
- pmnext
- pmregexp
- pmflags
- pmdynflags
- pmpermflags
- precomp
- pmoffet
-
Only when perl was compiled with ithreads.
- sv
- gv
- padix
- pv
- redoop
- nextop
- lastop
- label
- stash
- file
- cop_seq
- arybase
- line
The B module exports a variety of functions: some are simple
utility functions, others provide a Perl program with a way to
get an initial ``handle'' on an internal object.
- main_cv
-
Return the (faked) CV corresponding to the main part of the Perl
program.
- init_av
-
Returns the AV object (i.e. in class B::AV) representing INIT blocks.
- begin_av
-
Returns the AV object (i.e. in class B::AV) representing BEGIN blocks.
- end_av
-
Returns the AV object (i.e. in class B::AV) representing END blocks.
- main_root
-
Returns the root op (i.e. an object in the appropriate B::OP-derived
class) of the main part of the Perl program.
- main_start
-
Returns the starting op of the main part of the Perl program.
- comppadlist
-
Returns the AV object (i.e. in class B::AV) of the global comppadlist.
- regex_padav
-
Only when perl was compiled with ithreads.
- sv_undef
-
Returns the SV object corresponding to the C variable
sv_undef.
- sv_yes
-
Returns the SV object corresponding to the C variable
sv_yes.
- sv_no
-
Returns the SV object corresponding to the C variable
sv_no.
- amagic_generation
-
Returns the SV object corresponding to the C variable
amagic_generation.
- walkoptree(OP, METHOD)
-
Does a tree-walk of the syntax tree based at OP and calls METHOD on
each op it visits. Each node is visited before its children. If
walkoptree_debug (q.v.) has been called to turn debugging on then
the method walkoptree_debug is called on each op before METHOD is
called.
walkoptree_debug(DEBUG)
-
Returns the current debugging flag for
walkoptree. If the optional
DEBUG argument is non-zero, it sets the debugging flag to that. See
the description of walkoptree above for what the debugging flag
does.
- walksymtable(SYMREF, METHOD, RECURSE, PREFIX)
-
Walk the symbol table starting at SYMREF and call METHOD on each
symbol (a B::GV object) visited. When the walk reaches package
symbols (such as ``Foo::'') it invokes RECURSE, passing in the symbol
name, and only recurses into the package if that sub returns true.
-
PREFIX is the name of the SYMREF you're walking.
-
For example...
-
# Walk CGI's symbol table calling print_subs on each symbol.
# Only recurse into CGI::Util::
walksymtable(\%CGI::, 'print_subs', sub { $_[0] eq 'CGI::Util::' },
'CGI::');
-
print_subs() is a B::GV method you have declared.
svref_2object(SV)
-
Takes any Perl variable and turns it into an object in the
appropriate B::OP-derived or B::SV-derived class. Apart from functions
such as
main_root, this is the primary way to get an initial
``handle'' on an internal perl data structure which can then be followed
with the other access methods.
ppname(OPNUM)
-
Return the PP function name (e.g. ``pp_add'') of op number OPNUM.
hash(STR)
-
Returns a string in the form ``0x...'' representing the value of the
internal hash function used by perl on string STR.
cast_I32(I)
-
Casts I to the internal I32 type used by that perl.
- minus_c
-
Does the equivalent of the
-c command-line option. Obviously, this
is only useful in a BEGIN block or else the flag is set too late.
cstring(STR)
-
Returns a double-quote-surrounded escaped version of STR which can
be used as a string in C source code.
perlstring(STR)
-
Returns a double-quote-surrounded escaped version of STR which can
be used as a string in Perl source code.
class(OBJ)
-
Returns the class of an object without the part of the classname
preceding the first ``::''. This is used to turn ``B::UNOP'' into
``UNOP'' for example.
- threadsv_names
-
In a perl compiled for threads, this returns a list of the special
per-thread threadsv variables.
Malcolm Beattie, mbeattie@sable.ox.ac.uk