home *** CD-ROM | disk | FTP | other *** search
-
- <HTML>
- <HEAD>
- <TITLE>Devel::SelfStubber - generate stubs for a SelfLoading module</TITLE>
- <LINK REL="stylesheet" HREF="../../Active.css" TYPE="text/css">
- <LINK REV="made" HREF="mailto:">
- </HEAD>
-
- <BODY>
- <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
- <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
- <STRONG><P CLASS=block> Devel::SelfStubber - generate stubs for a SelfLoading module</P></STRONG>
- </TD></TR>
- </TABLE>
-
- <A NAME="__index__"></A>
- <!-- INDEX BEGIN -->
-
- <UL>
-
- <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
-
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- </UL>
- <!-- INDEX END -->
-
- <HR>
- <P>
- <H1><A NAME="name">NAME</A></H1>
- <P>Devel::SelfStubber - generate stubs for a SelfLoading module</P>
- <P>
- <HR>
- <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
- <UL>
- <LI>Linux</LI>
- <LI>Solaris</LI>
- <LI>Windows</LI>
- </UL>
- <HR>
- <H1><A NAME="synopsis">SYNOPSIS</A></H1>
- <P>To generate just the stubs:</P>
- <PRE>
- use Devel::SelfStubber;
- Devel::SelfStubber->stub('MODULENAME','MY_LIB_DIR');</PRE>
- <P>or to generate the whole module with stubs inserted correctly</P>
- <PRE>
- use Devel::SelfStubber;
- $Devel::SelfStubber::JUST_STUBS=0;
- Devel::SelfStubber->stub('MODULENAME','MY_LIB_DIR');</PRE>
- <P>MODULENAME is the Perl module name, e.g. Devel::SelfStubber,
- NOT 'Devel/SelfStubber' or 'Devel/SelfStubber.pm'.</P>
- <P>MY_LIB_DIR defaults to '.' if not present.</P>
- <P>
- <HR>
- <H1><A NAME="description">DESCRIPTION</A></H1>
- <P>Devel::SelfStubber prints the stubs you need to put in the module
- before the __DATA__ token (or you can get it to print the entire
- module with stubs correctly placed). The stubs ensure that if
- a method is called, it will get loaded. They are needed specifically
- for inherited autoloaded methods.</P>
- <P>This is best explained using the following example:</P>
- <P>Assume four classes, A,B,C & D.</P>
- <P>A is the root class, B is a subclass of A, C is a subclass of B,
- and D is another subclass of A.</P>
- <PRE>
- A
- / \
- B D
- /
- C</PRE>
- <P>If D calls an autoloaded method 'foo' which is defined in class A,
- then the method is loaded into class A, then executed. If C then
- calls method 'foo', and that method was reimplemented in class
- B, but set to be autoloaded, then the lookup mechanism never gets to
- the AUTOLOAD mechanism in B because it first finds the method
- already loaded in A, and so erroneously uses that. If the method
- foo had been stubbed in B, then the lookup mechanism would have
- found the stub, and correctly loaded and used the sub from B.</P>
- <P>So, for classes and subclasses to have inheritance correctly
- work with autoloading, you need to ensure stubs are loaded.</P>
- <P>The SelfLoader can load stubs automatically at module initialization
- with the statement 'SelfLoader->load_stubs()';, but you may wish to
- avoid having the stub loading overhead associated with your
- initialization (though note that the SelfLoader::load_stubs method
- will be called sooner or later - at latest when the first sub
- is being autoloaded). In this case, you can put the sub stubs
- before the __DATA__ token. This can be done manually, but this
- module allows automatic generation of the stubs.</P>
- <P>By default it just prints the stubs, but you can set the
- global $Devel::SelfStubber::JUST_STUBS to 0 and it will
- print out the entire module with the stubs positioned correctly.</P>
- <P>At the very least, this is useful to see what the SelfLoader
- thinks are stubs - in order to ensure future versions of the
- SelfStubber remain in step with the SelfLoader, the
- SelfStubber actually uses the SelfLoader to determine which
- stubs are needed.</P>
- <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
- <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
- <STRONG><P CLASS=block> Devel::SelfStubber - generate stubs for a SelfLoading module</P></STRONG>
- </TD></TR>
- </TABLE>
-
- </BODY>
-
- </HTML>
-