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

📄 perldebguts.pod

📁 MSYS在windows下模拟了一个类unix的终端
💻 POD
📖 第 1 页 / 共 3 页
字号:
    in  $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/E    out $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/E   out $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0  out $=main::BEGIN() from /dev/null:0  in  @=Config::myconfig() from /dev/null:0   in  $=Config::FETCH('Config=HASH(0x1aa444)', 'package') from lib/Config.pm:574   out $=Config::FETCH('Config=HASH(0x1aa444)', 'package') from lib/Config.pm:574   in  $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574   out $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574=item 30  in  $=CODE(0x15eca4)() from /dev/null:0   in  $=CODE(0x182528)() from lib/Config.pm:2    Package lib/Exporter.pm.   out $=CODE(0x182528)() from lib/Config.pm:0   scalar context return from CODE(0x182528): undef   Package lib/Config.pm.   in  $=Config::TIEHASH('Config') from lib/Config.pm:628   out $=Config::TIEHASH('Config') from lib/Config.pm:628   scalar context return from Config::TIEHASH:   empty hash   in  $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0    in  $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/Exporter.pm:171    out $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/Exporter.pm:171    scalar context return from Exporter::export: ''   out $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0   scalar context return from Exporter::import: ''=backIn all cases shown above, the line indentation shows the call tree.If bit 2 of C<frame> is set, a line is printed on exit from asubroutine as well.  If bit 4 is set, the arguments are printedalong with the caller info.  If bit 8 is set, the arguments areprinted even if they are tied or references.  If bit 16 is set, thereturn value is printed, too.When a package is compiled, a line like this    Package lib/Carp.pm.is printed with proper indentation.=head1 Debugging regular expressionsThere are two ways to enable debugging output for regular expressions.If your perl is compiled with C<-DDEBUGGING>, you may use theB<-Dr> flag on the command line.Otherwise, one can C<use re 'debug'>, which has effects atcompile time and run time.  It is not lexically scoped.=head2 Compile-time outputThe debugging output at compile time looks like this:  compiling RE `[bc]d(ef*g)+h[ij]k$'  size 43 first at 1     1: ANYOF(11)    11: EXACT <d>(13)    13: CURLYX {1,32767}(27)    15:   OPEN1(17)    17:     EXACT <e>(19)    19:     STAR(22)    20:       EXACT <f>(0)    22:     EXACT <g>(24)    24:   CLOSE1(26)    26:   WHILEM(0)    27: NOTHING(28)    28: EXACT <h>(30)    30: ANYOF(40)    40: EXACT <k>(42)    42: EOL(43)    43: END(0)  anchored `de' at 1 floating `gh' at 3..2147483647 (checking floating)				    stclass `ANYOF' minlen 7The first line shows the pre-compiled form of the regex.  The secondshows the size of the compiled form (in arbitrary units, usually4-byte words) and the label I<id> of the first node that does amatch.The last line (split into two lines above) contains optimizerinformation.  In the example shown, the optimizer found that the match should contain a substring C<de> at offset 1, plus substring C<gh>at some offset between 3 and infinity.  Moreover, when checking forthese substrings (to abandon impossible matches quickly), Perl will checkfor the substring C<gh> before checking for the substring C<de>.  Theoptimizer may also use the knowledge that the match starts (at theC<first> I<id>) with a character class, and the match cannot beshorter than 7 chars.The fields of interest which may appear in the last line are=over 4=item C<anchored> I<STRING> C<at> I<POS>=item C<floating> I<STRING> C<at> I<POS1..POS2>See above.=item C<matching floating/anchored>Which substring to check first.=item C<minlen>The minimal length of the match.=item C<stclass> I<TYPE>Type of first matching node.=item C<noscan>Don't scan for the found substrings.=item C<isall>Means that the optimizer info is all that the regularexpression contains, and thus one does not need to enter the regex engine atall.=item C<GPOS>Set if the pattern contains C<\G>.=item C<plus> Set if the pattern starts with a repeated char (as in C<x+y>).=item C<implicit>Set if the pattern starts with C<.*>.=item C<with eval> Set if the pattern contain eval-groups, such as C<(?{ code })> andC<(??{ code })>.=item C<anchored(TYPE)>If the pattern may match only at a handful of places, (with C<TYPE>being C<BOL>, C<MBOL>, or C<GPOS>.  See the table below.=backIf a substring is known to match at end-of-line only, it may befollowed by C<$>, as in C<floating `k'$>.The optimizer-specific info is used to avoid entering (a slow) regexengine on strings that will not definitely match.  If C<isall> flagis set, a call to the regex engine may be avoided even when the optimizerfound an appropriate place for the match.The rest of the output contains the list of I<nodes> of the compiledform of the regex.  Each line has format C<   >I<id>: I<TYPE> I<OPTIONAL-INFO> (I<next-id>)=head2 Types of nodesHere are the possible types, with short descriptions:    # TYPE arg-description [num-args] [longjump-len] DESCRIPTION    # Exit points    END		no	End of program.    SUCCEED	no	Return from a subroutine, basically.    # Anchors:    BOL		no	Match "" at beginning of line.    MBOL	no	Same, assuming multiline.    SBOL	no	Same, assuming singleline.    EOS		no	Match "" at end of string.    EOL		no	Match "" at end of line.    MEOL	no	Same, assuming multiline.    SEOL	no	Same, assuming singleline.    BOUND	no	Match "" at any word boundary    BOUNDL	no	Match "" at any word boundary    NBOUND	no	Match "" at any word non-boundary    NBOUNDL	no	Match "" at any word non-boundary    GPOS	no	Matches where last m//g left off.    # [Special] alternatives    ANY		no	Match any one character (except newline).    SANY	no	Match any one character.    ANYOF	sv	Match character in (or not in) this class.    ALNUM	no	Match any alphanumeric character    ALNUML	no	Match any alphanumeric char in locale    NALNUM	no	Match any non-alphanumeric character    NALNUML	no	Match any non-alphanumeric char in locale    SPACE	no	Match any whitespace character    SPACEL	no	Match any whitespace char in locale    NSPACE	no	Match any non-whitespace character    NSPACEL	no	Match any non-whitespace char in locale    DIGIT	no	Match any numeric character    NDIGIT	no	Match any non-numeric character    # BRANCH	The set of branches constituting a single choice are hooked    #		together with their "next" pointers, since precedence prevents    #		anything being concatenated to any individual branch.  The    #		"next" pointer of the last BRANCH in a choice points to the    #		thing following the whole choice.  This is also where the    #		final "next" pointer of each individual branch points; each    #		branch starts with the operand node of a BRANCH node.    #    BRANCH	node	Match this alternative, or the next...    # BACK	Normal "next" pointers all implicitly point forward; BACK    #		exists to make loop structures possible.    # not used    BACK	no	Match "", "next" ptr points backward.    # Literals    EXACT	sv	Match this string (preceded by length).    EXACTF	sv	Match this string, folded (prec. by length).    EXACTFL	sv	Match this string, folded in locale (w/len).    # Do nothing    NOTHING	no	Match empty string.    # A variant of above which delimits a group, thus stops optimizations    TAIL	no	Match empty string. Can jump here from outside.    # STAR,PLUS	'?', and complex '*' and '+', are implemented as circular    #		BRANCH structures using BACK.  Simple cases (one character    #		per match) are implemented with STAR and PLUS for speed    #		and to minimize recursive plunges.    #    STAR	node	Match this (simple) thing 0 or more times.    PLUS	node	Match this (simple) thing 1 or more times.    CURLY	sv 2	Match this simple thing {n,m} times.    CURLYN	no 2	Match next-after-this simple thing     #			{n,m} times, set parens.    CURLYM	no 2	Match this medium-complex thing {n,m} times.    CURLYX	sv 2	Match this complex thing {n,m} times.    # This terminator creates a loop structure for CURLYX    WHILEM	no	Do curly processing and see if rest matches.    # OPEN,CLOSE,GROUPP	...are numbered at compile time.    OPEN	num 1	Mark this point in input as start of #n.    CLOSE	num 1	Analogous to OPEN.    REF		num 1	Match some already matched string    REFF	num 1	Match already matched string, folded    REFFL	num 1	Match already matched string, folded in loc.    # grouping assertions    IFMATCH	off 1 2	Succeeds if the following matches.    UNLESSM	off 1 2	Fails if the following matches.    SUSPEND	off 1 1	"Independent" sub-regex.    IFTHEN	off 1 1	Switch, should be preceded by switcher .    GROUPP	num 1	Whether the group matched.    # Support for long regex    LONGJMP	off 1 1	Jump far away.    BRANCHJ	off 1 1	BRANCH with long offset.    # The heavy worker    EVAL	evl 1	Execute some Perl code.    # Modifiers    MINMOD	no	Next operator is not greedy.    LOGICAL	no	Next opcode should set the flag only.    # This is not used yet    RENUM	off 1 1	Group with independently numbered parens.    # This is not really a node, but an optimized away piece of a "long" node.    # To simplify debugging output, we mark it as if it were a node    OPTIMIZED	off	Placeholder for dump.=head2 Run-time outputFirst of all, when doing a match, one may get no run-time output evenif debugging is enabled.  This means that the regex engine was neverentered and that all of the job was therefore done by the optimizer.If the regex engine was entered, the output may look like this:  Matching `[bc]d(ef*g)+h[ij]k$' against `abcdefg__gh__'    Setting an EVAL scope, savestack=3     2 <ab> <cdefg__gh_>    |  1: ANYOF     3 <abc> <defg__gh_>    | 11: EXACT <d>     4 <abcd> <efg__gh_>    | 13: CURLYX {1,32767}     4 <abcd> <efg__gh_>    | 26:   WHILEM				0 out of 1..32767  cc=effff31c     4 <abcd> <efg__gh_>    | 15:     OPEN1     4 <abcd> <efg__gh_>    | 17:     EXACT <e>     5 <abcde> <fg__gh_>    | 19:     STAR			     EXACT <f> can match 1 times out of 32767...    Setting an EVAL scope, savestack=3     6 <bcdef> <g__gh__>    | 22:       EXACT <g>     7 <bcdefg> <__gh__>    | 24:       CLOSE1     7 <bcdefg> <__gh__>    | 26:       WHILEM				    1 out of 1..32767  cc=effff31c    Setting an EVAL scope, savestack=12     7 <bcdefg> <__gh__>    | 15:         OPEN1     7 <bcdefg> <__gh__>    | 17:         EXACT <e>       restoring \1 to 4(4)..7				    failed, try continuation...     7 <bcdefg> <__gh__>    | 27:         NOTHING     7 <bcdefg> <__gh__>    | 28:         EXACT <h>				    failed...				failed...

⌨️ 快捷键说明

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