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

📄 ch08_114.htm

📁 by Randal L. Schwartz and Tom Phoenix ISBN 0-596-00132-0 Third Edition, published July 2001. (See
💻 HTM
字号:
<html><head><title>Filter::Util::Call (Perl in a Nutshell, 2nd Edition)</title><link rel="stylesheet" type="text/css" href="../style/style1.css" /><meta name="DC.Creator" content="Stephen Spainhour" /><meta name="DC.Format" content="text/xml" scheme="MIME" /><meta name="DC.Language" content="en-US" /><meta name="DC.Publisher" content="O'Reilly &amp; Associates, Inc." /><meta name="DC.Source" scheme="ISBN" content="0596002416L" /><meta name="DC.Subject.Keyword" content="stuff" /><meta name="DC.Title" content="Perl in a Nutshell, 2nd Edition" /><meta name="DC.Type" content="Text.Monograph" /></head><body bgcolor="#ffffff"><img src="gifs/smbanner.gif" usemap="#banner-map" border="0" alt="Book Home" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Java and XSLT" /><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch08_113.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228" /><td align="right" valign="top" width="228"><a href="ch08_115.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr></table></div><h2 class="sect1">8.114. Filter::Util::Call</h2><p><a name="INDEX-1462" />Provides a framework for implementingsource filters in Perl code. While you may use Filter::Util::Calldirectly, we suggest you use Filter::Simple instead.</p><p>For example:</p><blockquote><pre class="code">package Milter; # Could just as well be called 'OldJoke' use Filter::Util::Call ; sub import {    my($type) = @_ ;    filter_add(bless []) ;} sub filter {    my($self) = @_;    my($status);           s/Shut-Up/Trouble/g           if ($status = filter_read()) &gt; 0;    $status ; } 1;</pre></blockquote><p>You'd use the above in your code like so:</p><blockquote><pre class="code">#!/usr/local/bin/perl -wuse Milter;print "Are you looking for Shut-Up?\n" ;</pre></blockquote><p>This prints:</p><blockquote><pre class="code">Are you looking for Trouble?</pre></blockquote><p>Filter::Util::Call implements the following methods.</p><div class="refentry"><table width="515" border="0" cellpadding="5"><tr><td align="left"><font size="+1"><b>filter</b></font></td><td align="right"><i></i></td></tr></table><hr width="515" size="3" noshade="true" align="left" color="black" /><pre>filter() </pre><p>Performs the main processing for the filter. Used with closurefilters; that is, a closure filter handles the lexical variables thatare maintained by the closure. The finished source, as processed by<tt class="literal">filter</tt>, will be returned in <tt class="literal">$_</tt>.</p><p><tt class="literal">filter</tt> returns a status, as follows:</p><dl><dt><b><tt class="literal">&lt; 0</tt> </b></dt><dd>An error has been encountered.</p></dd><dt><b><tt class="literal">EOF</tt></b></dt><dd>End-of-file has been reached unexpectedly.</p></dd><dt><b><tt class="literal">&gt; 0</tt></b></dt><dd>Everything is OK.</p></dd></dl></div><div class="refentry"><table width="515" border="0" cellpadding="5"><tr><td align="left"><font size="+1"><b>filter_add</b></font></td><td align="right"><i></i></td></tr></table><hr width="515" size="3" noshade="true" align="left" color="black" /><pre>filter_add(<em class="replaceable">ref</em>)</pre><p>Installs the filter. <tt class="literal">filter_add</tt> takes oneparameter, a reference, and depending on the kind of reference used,dictates which of the two filter types is used. CODE referencesresult in a closure filter; otherwise, method filters are assumed.</p></div><div class="refentry"><table width="515" border="0" cellpadding="5"><tr><td align="left"><font size="+1"><b>filter_del</b></font></td><td align="right"><i></i></td></tr></table><hr width="515" size="3" noshade="true" align="left" color="black" /><pre>filter_del()</pre><p>Disables the current filter. It doesn't destroy anyfilters, just tells Perl to stop using them.</p></div><div class="refentry"><table width="515" border="0" cellpadding="5"><tr><td align="left"><font size="+1"><b>filter_read</b></font></td><td align="right"><i></i></td></tr></table><hr width="515" size="3" noshade="true" align="left" color="black" /><pre>filter_read(<em class="replaceable">n</em>)</pre><p>Obtains a line or block from the next filter in the chain. If thereare no other filters, then the actual source file is obtained. Forexample:</p><blockquote><pre class="code">$status = filter_read();      # Requests a line$status = filter_read($size); # Requests a block of $size</pre></blockquote></div><div class="refentry"><table width="515" border="0" cellpadding="5"><tr><td align="left"><font size="+1"><b>filter_read_exact</b></font></td><td align="right"><i></i></td></tr></table><hr width="515" size="3" noshade="true" align="left" color="black" /><pre>filter_read_exact()</pre><p>Obtains a line or block from the next filter in the chain. If thereare no other filters, then the actual source file is obtained.</p></div><div class="refentry"><table width="515" border="0" cellpadding="5"><tr><td align="left"><font size="+1"><b>import</b></font></td><td align="right"><i></i></td></tr></table><hr width="515" size="3" noshade="true" align="left" color="black" /><pre>import()</pre><p>Creates an instance of the filter. Perl calls<tt class="literal">import</tt> indirectly when it encounters <tt class="literal">useMilter</tt> in your Perl program. <tt class="literal">import</tt> willalways have one parameter passed by Perl, which corresponds to thename of your package&#x2014;in this case, <tt class="literal">Milter</tt>.</p><p>So, if you do this:</p><blockquote><pre class="code">use Milter qw(pinta nina santa-maria);</pre></blockquote><p>You get in <tt class="literal">@_</tt>:</p><blockquote><pre class="code">@_[0] =&gt; "Milter"@_[1] =&gt; "pinta"@_[2] =&gt; "nina"@_[3] =&gt; "santa-maria"</pre></blockquote><p><tt class="literal">import</tt> then calls <tt class="literal">filter_add</tt>before finishing.</p></div><hr width="684" align="left" /><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch08_113.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228"><a href="index.htm"><img src="../gifs/txthome.gif" alt="Home" border="0" /></a></td><td align="right" valign="top" width="228"><a href="ch08_115.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr><tr><td align="left" valign="top" width="228">8.113. Filter::Simple </td><td align="center" valign="top" width="228"><a href="index/index.htm"><img src="../gifs/index.gif" alt="Book Index" border="0" /></a></td><td align="right" valign="top" width="228">8.115. FindBin</td></tr></table></div><hr width="684" align="left" /><img src="../gifs/navbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links" /><p><p><font size="-1"><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 + -