📄 filter::util::call.3
字号:
.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05).\".\" Standard preamble:.\" ========================================================================.de Sh \" Subsection heading.br.if t .Sp.ne 5.PP\fB\\$1\fR.PP...de Sp \" Vertical space (when we can't use .PP).if t .sp .5v.if n .sp...de Vb \" Begin verbatim text.ft CW.nf.ne \\$1...de Ve \" End verbatim text.ft R.fi...\" Set up some character translations and predefined strings. \*(-- will.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left.\" double quote, and \*(R" will give a right double quote. \*(C+ will.\" give a nicer C++. Capital omega is used to do unbreakable dashes and.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,.\" nothing in troff, for use with C<>..tr \(*W-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'.ie n \{\. ds -- \(*W-. ds PI pi. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch. ds L" "". ds R" "". ds C` "". ds C' ""'br\}.el\{\. ds -- \|\(em\|. ds PI \(*p. ds L" ``. ds R" '''br\}.\".\" Escape single quotes in literal strings from groff's Unicode transform..ie \n(.g .ds Aq \(aq.el .ds Aq '.\".\" If the F register is turned on, we'll generate index entries on stderr for.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index.\" entries marked with X<> in POD. Of course, you'll have to process the.\" output yourself in some meaningful fashion..ie \nF \{\. de IX. tm Index:\\$1\t\\n%\t"\\$2"... nr % 0. rr F.\}.el \{\. de IX...\}.\".\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2)..\" Fear. Run. Save yourself. No user-serviceable parts.. \" fudge factors for nroff and troff.if n \{\. ds #H 0. ds #V .8m. ds #F .3m. ds #[ \f1. ds #] \fP.\}.if t \{\. ds #H ((1u-(\\\\n(.fu%2u))*.13m). ds #V .6m. ds #F 0. ds #[ \&. ds #] \&.\}. \" simple accents for nroff and troff.if n \{\. ds ' \&. ds ` \&. ds ^ \&. ds , \&. ds ~ ~. ds /.\}.if t \{\. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u". ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'.\}. \" troff and (daisy-wheel) nroff accents.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'.ds 8 \h'\*(#H'\(*b\h'-\*(#H'.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#].ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#].ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#].ds ae a\h'-(\w'a'u*4/10)'e.ds Ae A\h'-(\w'A'u*4/10)'E. \" corrections for vroff.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'. \" for low resolution devices (crt and lpr).if \n(.H>23 .if \n(.V>19 \\{\. ds : e. ds 8 ss. ds o a. ds d- d\h'-1'\(ga. ds D- D\h'-1'\(hy. ds th \o'bp'. ds Th \o'LP'. ds ae ae. ds Ae AE.\}.rm #[ #] #H #V #F C.\" ========================================================================.\".IX Title "Filter::Util::Call 3".TH Filter::Util::Call 3 "2007-12-18" "perl v5.10.0" "Perl Programmers Reference Guide".\" For nroff, turn off justification. Always turn off hyphenation; it makes.\" way too many mistakes in technical documents..if n .ad l.nh.SH "NAME"Filter::Util::Call \- Perl Source Filter Utility Module.SH "SYNOPSIS".IX Header "SYNOPSIS".Vb 1\& use Filter::Util::Call ;.Ve.SH "DESCRIPTION".IX Header "DESCRIPTION"This module provides you with the framework to write \fISource Filters\fRin Perl..PPAn alternate interface to Filter::Util::Call is now available. SeeFilter::Simple for more details..PPA \fIPerl Source Filter\fR is implemented as a Perl module. The structureof the module can take one of two broadly similar formats. Todistinguish between them, the first will be referred to as \fImethodfilter\fR and the second as \fIclosure filter\fR..PPHere is a skeleton for the \fImethod filter\fR:.PP.Vb 1\& package MyFilter ;\&\& use Filter::Util::Call ;\&\& sub import\& {\& my($type, @arguments) = @_ ;\& filter_add([]) ;\& }\&\& sub filter\& {\& my($self) = @_ ;\& my($status) ;\&\& $status = filter_read() ;\& $status ;\& }\&\& 1 ;.Ve.PPand this is the equivalent skeleton for the \fIclosure filter\fR:.PP.Vb 1\& package MyFilter ;\&\& use Filter::Util::Call ;\&\& sub import\& {\& my($type, @arguments) = @_ ;\&\& filter_add(\& sub \& {\& my($status) ;\& $status = filter_read() ;\& $status ;\& } )\& }\&\& 1 ;.Ve.PPTo make use of either of the two filter modules above, place the linebelow in a Perl source file..PP.Vb 1\& use MyFilter;.Ve.PPIn fact, the skeleton modules shown above are fully functional \fISourceFilters\fR, albeit fairly useless ones. All they does is filter thesource stream without modifying it at all..PPAs you can see both modules have a broadly similar structure. They bothmake use of the \f(CW\*(C`Filter::Util::Call\*(C'\fR module and both have an \f(CW\*(C`import\*(C'\fRmethod. The difference between them is that the \fImethod filter\fRrequires a \fIfilter\fR method, whereas the \fIclosure filter\fR gets theequivalent of a \fIfilter\fR method with the anonymous sub passed to\&\fIfilter_add\fR..PPTo make proper use of the \fIclosure filter\fR shown above you need tohave a good understanding of the concept of a \fIclosure\fR. Seeperlref for more details on the mechanics of \fIclosures\fR..Sh "\fBuse Filter::Util::Call\fP".IX Subsection "use Filter::Util::Call"The following functions are exported by \f(CW\*(C`Filter::Util::Call\*(C'\fR:.PP.Vb 4\& filter_add()\& filter_read()\& filter_read_exact()\& filter_del().Ve.Sh "\fB\fP\f(BIimport()\fP\fB\fP".IX Subsection "import()"The \f(CW\*(C`import\*(C'\fR method is used to create an instance of the filter. It iscalled indirectly by Perl when it encounters the \f(CW\*(C`use MyFilter\*(C'\fR linein a source file (See \*(L"import\*(R" in perlfunc for more details on\&\f(CW\*(C`import\*(C'\fR)..PPIt will always have at least one parameter automatically passed by Perl\&\- this corresponds to the name of the package. In the example above itwill be \f(CW"MyFilter"\fR..PPApart from the first parameter, import can accept an optional list ofparameters. These can be used to pass parameters to the filter. Forexample:.PP.Vb 1\& use MyFilter qw(a b c) ;.Ve.PPwill result in the \f(CW@_\fR array having the following values:.PP.Vb 4\& @_ [0] => "MyFilter"\& @_ [1] => "a"\& @_ [2] => "b"\& @_ [3] => "c".Ve.PPBefore terminating, the \f(CW\*(C`import\*(C'\fR function must explicitly install thefilter by calling \f(CW\*(C`filter_add\*(C'\fR..PP\&\fB\f(BIfilter_add()\fB\fR.PPThe function, \f(CW\*(C`filter_add\*(C'\fR, actually installs the filter. It takes oneparameter which should be a reference. The kind of reference used willdictate which of the two filter types will be used..PPIf a \s-1CODE\s0 reference is used then a \fIclosure filter\fR will be assumed..PPIf a \s-1CODE\s0 reference is not used, a \fImethod filter\fR will be assumed.In a \fImethod filter\fR, the reference can be used to store contextinformation. The reference will be \fIblessed\fR into the package by\&\f(CW\*(C`filter_add\*(C'\fR..PPSee the filters at the end of this documents for examples of usingcontext information using both \fImethod filters\fR and \fIclosurefilters\fR..Sh "\fB\fP\f(BIfilter()\fP\fB and anonymous sub\fP".IX Subsection "filter() and anonymous sub"Both the \f(CW\*(C`filter\*(C'\fR method used with a \fImethod filter\fR and theanonymous sub used with a \fIclosure filter\fR is where the mainprocessing for the filter is done..PPThe big difference between the two types of filter is that the \fImethodfilter\fR uses the object passed to the method to store any context data,whereas the \fIclosure filter\fR uses the lexical variables that aremaintained by the closure..PPNote that the single parameter passed to the \fImethod filter\fR,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -