⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch12_11.htm

📁 By Tom Christiansen and Nathan Torkington ISBN 1-56592-243-3 First Edition, published August 1998
💻 HTM
字号:
<HTML><HEAD><TITLE>Recipe 12.10. Speeding Up Module Loading with Autoloader (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen &amp; Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:41:45Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch12_01.htm"TITLE="12. Packages, Libraries, and Modules"><LINKREL="prev"HREF="ch12_10.htm"TITLE="12.9. Speeding Module Loading with SelfLoader"><LINKREL="next"HREF="ch12_12.htm"TITLE="12.11. Overriding Built-In Functions"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch12_10.htm"TITLE="12.9. Speeding Module Loading with SelfLoader"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 12.9. Speeding Module Loading with SelfLoader"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch12_01.htm"TITLE="12. Packages, Libraries, and Modules"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch12_12.htm"TITLE="12.11. Overriding Built-In Functions"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 12.11. Overriding Built-In Functions"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch12-29699">12.10. Speeding Up Module Loading with Autoloader</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch12-pgfId-1066">Problem<ACLASS="indexterm"NAME="ch12-idx-1000005251-0"></A><ACLASS="indexterm"NAME="ch12-idx-1000005251-1"></A></A></H3><PCLASS="para">You want to use the AutoLoader module.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch12-pgfId-1072">Solution</A></H3><PCLASS="para">The easiest solution is to use the <EMCLASS="emphasis">h2xs</EM> facility to create a directory and all the files you'll need. Here we assume you have your own directory, <EMCLASS="emphasis">~/perllib/</EM>, which contains your personal library modules.</P><PRECLASS="programlisting">% h2xs -Xn Sample% cd Sample% perl Makefile.PL LIB=~/perllib% (edit Sample.pm)% make install</PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch12-pgfId-1088">Discussion</A></H3><PCLASS="para">The AutoLoader addresses the same performance issues as the SelfLoader. It also provides stub functions that get replaced by the real ones the first time they're called. But instead of looking for functions all in the same file, hidden below a <CODECLASS="literal">__DATA__</CODE> marker, the AutoLoader expects to find the real definition for each function in its own file. If your <ICLASS="filename">Sample.pm</I> module had two functions, <CODECLASS="literal">foo</CODE> and <CODECLASS="literal">bar</CODE>, then the AutoLoader would expect to find them in <EMCLASS="emphasis">Sample/auto/foo.al</EM> and <EMCLASS="emphasis">Sample/auto/bar.al</EM>, respectively. Modules employing the AutoLoader load faster than those using the SelfLoader, but at the cost of extra files, disk space, and complexity.</P><PCLASS="para">This setup sounds complicated. If you were doing it manually, it probably would be. Fortunately, <EMCLASS="emphasis">h2xs</EM> helps out tremendously here. Besides creating a module directory with templates for your <EMCLASS="emphasis">Sample.pm</EM> file and other files you'll need, it also generates a Makefile that uses the AutoSplit module to break your module's functions into little files, one function per file. The <CODECLASS="literal">make</CODE> <CODECLASS="literal">install</CODE> rule installs these so they will be found automatically. All you have to do is put the module functions down below an <CODECLASS="literal">__END__</CODE> line (rather than a <CODECLASS="literal">__DATA__</CODE> line as in SelfLoader) that you'll find has already been created.</P><PCLASS="para">As with the SelfLoader, it's easier to develop and test your module without the AutoLoader. Just comment out the <CODECLASS="literal">__END__</CODE> line while developing it.</P><PCLASS="para">The same restrictions about the invisibility of file lexicals that apply to modules using the SelfLoader also apply when using the AutoLoader, so using file lexicals to maintain private state doesn't work. If state is becoming that complex and significant issue, consider writing an object module instead of a traditional one.<ACLASS="indexterm"NAME="ch12-idx-1000005253-0"></A><ACLASS="indexterm"NAME="ch12-idx-1000005253-1"></A></P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch12-pgfId-1100">See Also</A></H3><PCLASS="para">The documentation for the standard module AutoLoader, also in <ACLASS="olink"HREF="../prog/ch07_01.htm">Chapter 7</A> of <ACLASS="citetitle"HREF="../prog/index.htm"TITLE="Programming Perl"><CITECLASS="citetitle">Programming Perl</CITE></A>; <ICLASS="filename">h2xs </I>(1); <ACLASS="xref"HREF="ch12_10.htm"TITLE="Speeding Module Loading with SelfLoader">Recipe 12.9</A></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch12_10.htm"TITLE="12.9. Speeding Module Loading with SelfLoader"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 12.9. Speeding Module Loading with SelfLoader"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="book"HREF="index.htm"TITLE="Perl Cookbook"><IMGSRC="../gifs/txthome.gif"ALT="Perl Cookbook"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch12_12.htm"TITLE="12.11. Overriding Built-In Functions"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 12.11. Overriding Built-In Functions"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228">12.9. Speeding Module Loading with SelfLoader</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="index"HREF="index/index.htm"TITLE="Book Index"><IMGSRC="../gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228">12.11. Overriding Built-In Functions</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><FONTSIZE="-1"></DIV<!-- LIBRARY NAV BAR --> <img src="../gifs/smnavbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links"><p> <a href="copyrght.htm">Copyright &copy; 2002</a> O'Reilly &amp; Associates. All rights reserved.</font> </p> <map name="library-map"> <area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map> </BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -