PERLCOMPILE 7
目录
PERLCOMPILE
NAMEDESCRIPTION æè¿°
Using The Back Ends 使ç¨å端
Module List for the Compiler Suite ç¼è¯å¥ä»¶ç模åå表
KNOWN PROBLEMS å·²ç¥çé®é¢
AUTHOR ä½è
è¯è
NAME
perlcompile - å³äº Perl ç¼è¯å¨åç¿»è¯å¨çä»ç»
DESCRIPTION æè¿°
Perl ä¸ç´æ¯æä¸ä¸ªç¼è¯å¨çï¼ä½ çæºæä»¶ä¼è¢«ç¼è¯æä¸ç§å鍿 ¼å¼ï¼ä¸ç§è¯- æ³åææ ï¼ï¼å¹¶ä¸å¨è¿è¡åè¿ä¼è¢«ä¼åãä»5.005çæ¬èµ·ï¼Perl å¨åè¡æ¶å°±å¸¦æä¸ä¸ªæ¨¡åå¯ä»¥æ£æ¥ä¼åè¿çè¯- æ³åææï¼è¯¥æ¨¡åç§°ä½B模å("B")ï¼ï¼å®è¢«ç¨æ¥ç¼åè®¸å¤æç¨çåè½ï¼åæ¬ä¸ä¸ªå¯ä»¥å°ä½çPerl转æCæºä»£ççæ¨¡åï¼è¿æ·åç¼è¯åå°±å¯ä»¥å¾å°ä¸ä¸ªå¯æ§è¡çæä»¶äºã
"B" 模åæä¾äºè®¿é®è¯æ³åææ çæ¹æ³, å¶å®çä¸äºæ¨¡åï¼âå端âï¼å对è¿ä¸ªæ è¿è¡æä½ãä¸äºæå®ï¼è¯æ³æ ï¼ä»¥å- èççå½¢å¼è¾åºï¼è¿æä»¥Cæºä»£çå½¢å¼çè¾åºçï¼åè以åå¯è¯»çææ¬å½¢å¼è¾åºçãå¦ä¸äºéåæ´æ£µè¯- æ³æ 以建ç«ä¸ä¸ªå³äºæä½¿ç¨çå- ç¨åºï¼æ¼å¼ååéç交åå¼ç¨è¡¨ãè¿æå¦å¤ä¸äºæ£æ¥ä½ç代çï¼ççææ²¡ææ¨¡æ£±ä¸¤å¯çæéãå¦ä¸äºåéæ°å°è¯- æ³æ å¯¼åºæPerl代ç ï¼å¯ä»¥èµ·ä»£ç ç¾åææ¯æ¶é¤æ··ä¹±ç代ç çä½ç¨ã
å 为 "B" 模åçæåç®çæ¯æä¾ä¸ç§è½å°Perlç¨åºè½¬ä¸ºå¯¹åºC代ççæ¹æ³ï¼æ¥çå°±è½æå®åæå¯æ§è¡æä»¶äºï¼æä»¥ "B" 模ååå®çé£äºå端模å就被认为æ¯âç¼è¯å¨âäºï¼å³ä½¿å®ä»¬å®é䏿²¡æåä»»ä½ç¼è¯æ¹é¢çäºãè¿ä¸ªç¼è¯å¨çå个é¨å精确ç说åºè¯¥æ¯ä¸ªâç¿»è¯å¨âï¼æèä¸ä¸ªâæ£è§å¨âï¼ä½æ¯ç¨Perlç人们æ³è¦ä¸ä¸ªâç¼è¯é项âè䏿¯ä¸ä¸ªå«åâæ£è§å¨âçå°ç©èºãä½è½æä¹åå¢ï¼
è¿ç¯æç«ç主è¦å容æ¯è®²Perlç¼è¯å¨çç¨æ³ï¼å®åå«ç模åï¼ææ·ä½¿ç¨é£äºæéè¦çå端模åï¼å®ä»¬æä»ä¹é®é¢ï¼å¦ä½è®©å®ä»¬å·¥ä½ã
Layout å¸å±
ç¼è¯å¨çå端æ¾å¨ "B::" éé¢ï¼èå端ï¼å°±æ¯ä½ ï¼ç¼è¯å¨ç使ç¨èï¼ææ¶åè¦ä¸ä¹äº¤äºçï¼æ¯ O 模åãä¸äºå端ï¼å¦ "B::C")ï¼æä¾äºä¸äºç¨åºï¼å¦perlccï¼æ¥éèæ¨¡åç夿æ§ã
è¿éæ¯ä¸äºå¼å¾ç¥éçéè¦å端ï¼å¹¶éæå®ä»¬ç®åçç¶æï¼ç¨0å°10çæ´æ°è¡¨ç¤ºãï¼ç¶æ0表示ç®å该é¨ååè½åªæ¯æä¸ä¸ªæ¡æ¶ï¼è¿æ²¡æå®ç°ï¼ç¶æ10åè¡¨ç¤ºå¦æè¿æBugçè¯ï¼æä»¬ä¼æå°å¾å¥æªçï¼ï¼
B::Bytecode
å°è¯æ³æ å- ææºå¨ç¸å³çæ¼å¼ï¼å¯ä¾BtyeLoader模åå¯ä»¥å¨ä»¥åéæ°è£å¥ãç¶æï¼5ï¼ä¸äºé¨åå¯ä»¥å·¥ä½ï¼ä¸äºä¸å¯ä»¥ï¼è¿æä¸äºè¿æ²¡ææµè¯ï¼
B::C
å建Cä»£ç æä»¶ï¼å¶ä¸åæ¬äºé建è¯- æ³æ 忢å¤è§£éå¨ç代ç ãç¶æï¼6ï¼è®¸å¤æåµä¸å¯ä»¥æ- £å¸¸å·¥ä½ï¼åæ¬ä½¿ç¨äºTkçç¨åºï¼ã
B::CC
æç§è¯æ³æ ä¸è¿è¡æä»£ç çè·¯å¾å建Cä»£ç æä»¶ãè¿æ¯æå Perl - C ç¿»è¯å¨çä¸ä¸ªï¼ä½æ¯å®çæç代ç å 乿¯ä¸è½çæçï¼å ä¸ºå®æè¯- æ³æ ç¿»è¯æäºä¸ä¸ªå·¨å¤§çswitchç»ææ¥æä½Perlä¸- çç»æãæç»çç®çæ¯å¨perlç¨åºä¸ç»åºè¶³å¤çç±»åä¿¡æ¯åï¼å¯ä»¥å° perl æ°æ®ç»æçæä½è½¬æ¢ä¸º c 级å«çæ°æ®ç»æï¼å¯¹ int å float çæä½ãç¶æï¼5 (æäºå¯ä»¥å·¥ä½ï¼åæ¬ä¸å¤æç Tk 示ä¾).
B::Lint
å½åç°ä½ ç代ç ä¸ææ¨¡æ£±ä¸¤å¯çæé æ¶ä¼ååºè- ¦åãç¶æï¼6ï¼è®¸å¤æåµä¸å¯ä»¥æ£å¸¸å·¥ä½ï¼ä»ä»å¨å¾å°æ°çé¢ååå®ä¼åæ- ¢å·¥ä½ï¼ã
B::Deparse
éæ°çæPerl代çï¼è¯çæä»£çç¨ä¸è´çæ¼å¼ååºæ¥ãç¶æï¼8ï¼å®å·¥ä½å¾å¾å¥½ï¼åªæ¯ä¼ç¥å»ä¸äºæ¦æ¶©é¾æçé¨åï¼ã
B::Xref
çæå³äºç³æåå³äºåé以åå- ç¨åºçä½¿ç¨æåµçæ¥åãç¶æï¼8ï¼å®å·¥ä½å¾å¾å¥½ï¼åªæ¯ä»æä¸ç¹å»¶è¿æ¹é¢çbugsï¼ã
Using The Back Ends 使ç¨å端
æ¥ä¸æ¥çé¨åä»ç»ææ·ä½¿ç¨åç§åæ·çç¼è¯å¨å端ãä»ç»çé¡ºåºæç§å端çæçç¨åº¦æåï¼æä»¥æä¸ºç¨³å®çï¼ç»è¿äºéªè¯çåç«¯ä¼æåä»ç»ï¼è¿å¨è¯éªä¸- åæ²¡æå®æçå端就æ¾å°åé¢æè¿°äºã
O模åé»è®¤è®© -c å¼å³ææï¼è¿é²æ- ¢Perlå¨ç¼è¯å®ä»£çåè¿è¡ç¨åºãè¿ä¹æ¯ä¸ºä»ä¹ææçå端å¨äº§çä»»ä½è¾åºåé½ä¼æå°ä¸å¥ï¼
myperlprogram syntax OK
The Cross Referencing Back End 交åå¼ç¨å端
交åå¼ç¨å端ï¼B::Xrefï¼çæä¸ä¸ªå³äºä½ çç¨åºçæ¥è¡¨ï¼æåä¸ªç³æä»¥åå- ç¨åºï¼åéï¼åæ¬æ ¼å¼ï¼çä½¿ç¨æåµå奿件ä¸- å»ã䏾便¥è¯´ï¼è¿æä¸æ®µæèªå¯¹pod2manç¨åºåæåçæçæ¥è¡¨ï¼è¯¥ç¨åºæ¯Perlèªå¸¦çä¸ä¸ªä¾ç¨ï¼ï¼
Subroutine
clear_noremap
Package (lexical)
$ready_to_print i1069, 1079
Package main
$& 1086
$. 1086
$0 1086
$1 1087
$2 1085, 1085
$3 1085, 1085
$ARGV 1086
%HTML_Escapes 1085, 1085
è¿éå±ç¤ºäº"clear_noremap" åç¨åºä¸åéçä½¿ç¨æåµãå°±ååé $ready_to_print æ¯ my() (è¯æ³) çä¸ä¸ªåéï¼å¨ç¬¬1069è¡è¢«å¼å¥( åæç¨çè¯æ¯introducedï¼ä¹å°±æ¯å¨ my() ä¸ç¬¬ä¸æ¬¡è¢«å®ä¹çææ )ï¼ç¶åå¨ç¬¬1079è¡è¯¥åé被使ç¨äºãä»ä¸»åï¼main packageï¼ä¸æ¥çåé $& åå¨ç¬¬1086è¡è¢«ä½¿ç¨, ççã
è¡å·åé¢å¯è½ä¼æä¸ä¸ªåæ¯ä½ä¸ºåç¼ï¼å®ä»¬çæææ¯ï¼
|
i |
åé馿¬¡è¢«å¼å¥ (å¨my()ä¸ç³æ) ã |
|||
|
& |
åç¨åºæèæ¹æ³çå¼ç¨ã |
|||
|
s |
å®ä¹çåç¨åºã |
|||
|
r |
å®ä¹çæ ¼å¼ã |
交åå¼ç¨ä¸æä¸ºæç¨çéé¡¹å°±æ¯ææ¥è¡¨åå¥ä¸åçæä»¶ï¼ä¾å¦è¦æå³äº myperlprogram çæ¥è¡¨å奿件 report ä¸ï¼
$ perl -MO=Xref,-oreport myperlprogram
The Decompiling Back End åç¼è¯å端
åç¼è¯åç«¯å°æä½ çPerlè¯- æ³æéæ°åææºä»£çãçæçæºä»£çä¼æç§æç§æ¼å¼ç»ç»ï¼æä»¥è¿ä¸ªå端å¯ä»¥ç¨æ¥æ¶é¤ä»£çä¸- çæ··ä¹±é¨åãæ¤å端çåºæ¬ä½¿ç¨æ¹æ³å¦ä¸ï¼
$ perl -MO=Deparse myperlprogram
ä½ä¹è®¸é©¬ä¸ä¼åç°Perlå¹¶ä¸ç¥éå¦ä½ç»ä½ç代çåæ®µãä½è¦èªå·±æå¨æ·»å¥æ°è¡æ¥æè¿å¤§æ- ç代ç åå¼ãç¶èç°å¨ï¼è®©æä»¬çç代ç åªæä¸è¡æ¶æåµææ ·ï¼è¿ä¸ªå端ä¼åäºä»ä¹ï¼
$ perl
-MO=Deparse -e ’$op=shift⎪⎪die
"usage: $0
code [...]";chomp(@ARGV=<>)unless@ARGV;
for(@ARGV){$was=$_;eval$op;
die$@ if$@; rename$was,$_ unless$was eq $_}’
-e syntax OK
$op = shift @ARGV ⎪⎪ die("usage: $0 code
[...]");
chomp(@ARGV = <ARGV>) unless @ARGV;
foreach $_ (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename $was, $_ unless $was eq $_;
}
è¿ä¸ªåç«¯ä¹æåæ¡é项æ§å¶çæç代çï¼ä¸¾ä¾è¯´ï¼ä½å¯ä»¥æç¼©è¿ç尺寸设å¨4ï¼æå¤§ï¼å°2ä¹é´ï¼
$ perl -MO=Deparse,-si2 myperlprogram
-p å¼å³æ§å¶å¨å¸¸å¸¸å¯ä»¥ä¸å 忬å·çå°æ¹å ä¸å®ä»¬ï¼
$ perl
-MO=Deparse -e ’print "Hello,
world\n"’
-e syntax OK
print "Hello, world\n";
$ perl -MO=Deparse,-p -e ’print "Hello,
world\n"’
-e syntax OK
print("Hello, world\n");
è¦ç¥éæ´å¤ï¼è¯·åè B::Deparse
Lint å端
lint å端 ï¼B::Lintï¼ æ£å¯ç¨åºä¸- ä¸å¥½çç¨åºé£æ¼ãä¸ä¸ªç¨åºè®¤ä¸ºçä¸å¥½é£æ¼å¯è½å¯¹å¦å¤ä¸ä¸ªç¨åºåæ¥è¯´æ¯ç¨èµ·æ¥å¾ææçå·¥å·ï¼æä»¥æé项让ä½è®¾å®åªäºä¸ä¸å°ä¼åå°æ£æ¥ã
è¦è¿è¡ä¸ä¸ªé£æ ¼æ£æ¥å¨æ£å¯ä½ ç代ç ï¼
$ perl -MO=Lint myperlprogram
è¦åæ¶å¯¹ä¸ä¸æå没æå®ä¹çåç¨åºçæ£æ¥ï¼
$ perl -MO=Lint,-context,-undefined-subs myperlprogram
è¦ç¥éæ´å¤çé项信æ¯ï¼è¯·ç B::Lint
The Simple C Back End ç®åçCå端
è¿ä¸ªæ¨¡åç¨æ¥æä½ çPerlç¨åºçåé¨ç¼è¯ç¶æåå¨å°ä¸ä¸ªCä»£ç æä»¶ä¸- å»ï¼èçæçC代çå°±å¯ä»¥è¢«ç¹å®å¹³å°ä¸çCç¼è¯å¨è½¬æ¢æä¸ä¸ªå¯æ§è¡æä»¶äºãæåçç¨åºè¿ä¼åPerlè§£éå¨çåºæä»¶éæé¾æ¥èµ·æ¥ï¼æä»¥å®ä¸ä¼èçä½çç£ç空é´ï¼é¤éä½çPerlæ¯ç¨å±äº«çåºæä»¶å建çï¼ææ¯ç¨åºå¤§å°ï¼ç¶èï¼å¦ä¸æ¹é¢ï¼ç¨åºå¯å¨èµ·æ¥ä¼å¿«ä¸äºã
"perlcc" å·¥å·ç¼ºçæ¯çæä»¥ä¸ç坿§è¡æä»¶ã
perlcc myperlprogram.pl
The Bytecode Back End åèç å端
è¿ä¸ªæ¨¡ååªæå¨ä½ è½å¤æ¾å°ä¸ç§æ¹æ³æ¥è£å¥å¹¶è¿è¡å®çæçå- èç æ¶æä¼æ¾å¾æç¨ãByteLoader模åæä¾äºè¿é¡¹åè½ã
è¦æPerlè½¬æ¢æå¯æ§è¡çåèç ï¼ä½ å¯ä»¥ä½¿ç¨ "perlcc" ç "-B" å¼å³:
perlcc -B myperlprogram.pl
å
- èçæ¯åæºå¨ç±»åæå³çï¼æä»¥ä¸æ¦ä½ç¼è¯äºä¸ä¸ªæ¨¡åææ¯ç¨åºï¼å®å°±å¯ä»¥åPerlæºä»£ç䏿·å·æå¯ç§»æ¤æ§ãï¼å设é£ä¸ªæ¨¡åæèç¨åºç使ç¨èæä¸ä¸ªè¶³å¤æ°çPerlè§£é卿¥å¯¹å- èç è¿è¡è§£ç ï¼
æä¸äºéé¡¹ç¨æ¥æ§å¶è¦çæçå- èç çæ§è´¨åå³äºä¼åæ¹é¢çåæ°ï¼è¦ç¥éè¿äºé项çè¯¦ç»æåµï¼è¯·åè B::Bytecode
The Optimized C Back End ä¼åçCå端
ä¼åçCå端æç§è¯æ³æ ä¸è¿è¡æä»£ç çè·¯å¾å°ä½ çPerlç¨åºè½¬æ¢æç- æç(使¯è¢«ä¼åäºç)C代çæä»¶ãè¿ä¸ªCç¨åºä¼ç´æ¥å¯¹Perlçæ°æ®ç»æè¿è¡æä½ï¼èä¸ä¹ä¼é¾æ¥Perlçè§£éå¨çåºæä»¶ï¼ä»¥æ¯æ eval(), "s///e", "require" ççã
"perlcc" å·¥å·ä½¿ç¨ -O å¼å³çæè¿ç§å¯æ§è¡æä»¶ãè¦ç¼è¯ä¸ä¸ªPerlç¨åºï¼ä»¥".pl" æè".p" ç»å°¾ï¼ï¼
perlcc -O myperlprogram.pl
ä»Perl模åå建ä¸ä¸ªå±äº«åºæä»¶ï¼ä»¥ ".pm" ç»å°¾ï¼ï¼
perlcc -O Myperlmodule.pm
ç¥éæ´å¤ï¼è¯·åè perlcc å B::CC.
Module List for the Compiler Suite ç¼è¯å¥ä»¶ç模åå表
|
B |
è¿ä¸ªæ¨¡åæ¯ä¸ä¸ªèªççï¼introspectiveï¼ç¨Javaçæ¯è¯- 说就æ¯âreflectiveâï¼æ¨¡åï¼å许Perlç¨åºå®¡è§èªå·±çåé¨ãå端模å齿¯éè¿è¿ä¸ªæ¨¡åæ¥è®¿é®è¯- æ³åææ çãèä½ ï¼å端模åçç¨æ·ï¼å°±ä¸ç¨åB模åæäº¤éäºã | ||
|
O |
è¿ä¸ªæ¨¡åæ¯ç¼è¯å¨çé£äºå端çå端ï¼ä¸è¬åè¿æ ·è¿è¡è°ç¨ï¼ |
$ perl -MO=Deparse myperlprogram
è¿ä¸å¨è¿ä¸ªPerlç¨åºä¸ä½¿ç¨ "use O ’Deparse’" ç¸åã
B::Asmdata
è¿ä¸ªæ¨¡å被 B::Assembler 模å使ç¨ï¼è B::Assembler 忥ç被 B::Bytecode 模å使ç¨ï¼B::Bytecode䏿ä¸ä¸ªåèç å½¢å¼åæ¾çè¯- æ³åææä»¥ä¾¿ä»¥åè£å¥ãB::Asmdataèªå·±å¹¶ä¸ç®æ¯ä¸ä¸ªå端ï¼ä¹è®¸è¯´å®æ¯å端çä¸ä¸ªç»ä»¶æ¯è¾å¥½ã
B::Assembler
è¿ä¸ªæ¨¡åå¯ä»¥å°è¯æ³æ 转为éåå- å¨åæ¢å¤çæ°æ®å½¢å¼ã宿¬èº«ä¸æ¯ä¸ä¸ªå端ï¼ä½æ¯ç®æ¯æä¸ªå端çä¸ä¸ªç»ä»¶ã assemble ç¨åºç¨å®æ¥çæåèç ã
B::Bblock
è¿ä¸ªæ¨¡å被 B::CC å端使ç¨ãå®è¢«ç¨æ¥è¿è¡âåºæ¬åâãä¸ä¸ªåºæ¬åå°±æ¯ä¸æ®µä»å¤´å°å°¾çæä½ï¼ä¸- é´æ¯ä¸å¯è½å䏿¥æåºç°åæ¯çã
B::Bytecode
è¿ä¸ªæ¨¡åå¯ä»¥ç±ç¨åºçè¯æ³æ çæåèç ãçæçåèç ä¼è¢«åå¥å°æä»¶ä¸- ï¼ä»¥åè¿è½è¢«éæ°æ¢å¤æè¯- æ³æãæ»çç®æå°±æ¯ä¸ºäºåªè¿è¡ä¸æ¬¡è´¹æ¶çç¨åºç¼è¯å·¥ä½ï¼ç¶åæè§£éå¨çç¶æå- 奿件ä¸ï¼è¿è¡ç¨åºæ¶åæç¶æä»æä»¶ä¸æ¢å¤ã å·ä½çç¨æ³è¯·åè "The Bytecode Back End" ã
B::C
è¿ä¸ªæ¨¡åæç§è¯- æ³æåå¶ä»ä¸äºè§£éå¨çå鍿°æ®ç»æçæC代çãç¶åä½åç¼è¯çæçC代çï¼å°±å¯ä»¥å¾å°ä¸ä¸ªå¯æ§è¡æä»¶äºãè¿è¡æ¶è¿ä¸ªå¯æ§è¡æä»¶ä¼æ¢å¤è§£éå¨ååé¨çæ°æ®ç»ææ¥è½¬å¨ç¨åºãè¦ç¥éç»è请åè "The Simple C Back End"ã
B::CC
è¿ä¸ªæ¨¡åæç§ä½ ç¨åºä¸çæä½çæC代ç ãä¸å B::C 模ååªæ¯æè§£éåå®çç¶æå- å¥Cç¨åºä¸ï¼ B::CC 模åçæçæ¯ä¸åå«è§£éå¨çC ç¨åºï¼æä»¥ç¨ B::CC ç¿»è¯çC ç¨åºè¿è¡é度æ¯ä¸è¬çè§£éæ§è¡çç¨åºé度è¦å¿«ï¼å·ä½ç¨æ³è¯·åè "The Optimized C Back End" ã
B::Concise
è¿ä¸ªæ¨¡åè¾åºä¸ä¸ªç®æ´ç (使¯å®æ´ç) Perl åææ ãå®çè¾åºæ¯ B::Terse æè B::Debug çç»ææ´å®¹æå®å¶ (å¹¶ä¸ä¹å¯ä»¥æ¨¡ä»¿å®ä»¬)ãè¿ä¸ªæ¨¡å对书åèªå·±çåç«¯ï¼æèå¦ä¹ Perl å®ç°ç人æç¨ãå®å¯¹ä¸è¬çç¨åºå没æç¨å¤ã
B::Debug
è¿ä¸ªæ¨¡åæPerlè¯æ³åææ é常详ç»å°è¾åºå°æ åè¾åºä¸å»ãè¿å¯¹æ- £å¨ç¼åèªå·±çå端ç¨åºï¼ææ- £å¨æ·±å¥Perlå鍿ºå¶ç人们æ¥è¯´æ¯é常æç¨çã对æ®éç¨åºåæ¥è¯´å没ä»ä¹ç¨ã
B::Deparse
è¿ä¸ªæ¨¡åå°ç¼è¯äºçè¯- æ³æåååæå¾åºPerlæºä»£çï¼è¿å¨è°è¯ææ¯åç¼è¯ä»äººä»£ççæ¶å伿¯é常æç¨çãå¦å¤è®©å®ä¸ºä½èªå·±ç代çåä¸äºç¾åå·¥ä½ä¹æ¯å¯ä»¥çãè¦ç¥éç»è请åè "The Decompiling Back End"ã
B::Disassembler
è¿ä¸ªæ¨¡åæåèç æ¢å¤æè¯- æ³æ ï¼å®æ¬èº«ä¸æ¯ä¸ä¸ªå端ï¼èæ¯æä¸ªå端çä¸ä¸ªç»ä»¶ãå®ä¼è¢«åå- èç å¨ä¸èµ·ç disassemble ç¨åºä½¿ç¨ã
B::Lint
è¿ä¸ªæ¨¡å审è§ä½ç代çç¼è¯åçæ¼å¼ï¼å¹¶ä¸æ¾å°é£äºå®¹æè®©äººç±çï¼å´åä¸è³äºå¼èµ·è- ¦åçå°æ¹ã䏾便¥è¯´ï¼ä½¿ç¨ä¸ä¸ªæ éå容ï¼scalar contextï¼çæ°ç»ï¼è䏿¾å¼å°ç³ææ "scalar(@array)" ãè¿ç§æåµæ¯ä¼è¢« Lint æ ç¤ºåºæ¥çãè¦ç¥éç»è请åè "The Lint Back End"ã
B::Showlex
è¿ä¸ªæ¨¡åæå°åº my() ä¸çåéå¨å½æ°ææ¯æä»¶ä¸çä½¿ç¨æåµï¼ä»¥å¾å°ä¸ä»½å³äº my() ä¸çåéå¨å®ä¹äºæä»¶ myperlprogram ä¸çåç¨åº mysub() ä¸- çä½¿ç¨æåµçå表ï¼
$ perl -MO=Showlex,mysub myperlprogram
è¦å¾å°ä¸ä»½å³äº my() ä¸çåé卿件myperlprogramä¸çä½¿ç¨æåµçå表ï¼
$ perl -MO=Showlex myperlprogram
[ BROKEN ]
B::Stackobj
è¿ä¸ªæ¨¡å被 B::CC 模åè°ç¨ã宿¬èº«ä¸æ¯å端ï¼ä½æ¯æ¯æä¸ªå端çä¸ä¸ªç»ä»¶ã
B::Stash
è¿ä¸ªæ¨¡å被 perlcc ç¨åºè°ç¨ï¼èperlccå¯ä»¥æä¸ä¸ªæ¨¡åç¼è¯æå¯æ§è¡æä»¶ãB::Stash æç¨åºä½¿ç¨ç符å·è¡¨æå°åºæ¥ï¼å¹¶è¢«ç¨æ¥é»æ¢ B::CC 为 B::* ææ¯ O 模åçæC 代ç ã宿¬èº«ä¸æ¯å端ï¼ä½æ¯æ¯æä¸ªå端çä¸ä¸ªç»ä»¶ã
B::Terse
è¿ä¸ªæ¨¡åç¨æ¥æå°è¯- æ³æ çå容ï¼ä½æ¯ä¿¡æ¯ä¸ä¼æB::Debugæå°çé£ä¹å¤ãå¯¹æ¯æ¥è¯´ï¼"print "Hello, world."" ä¼è®© B::Debug 产ç96è¡è¾åºï¼ 使¯ B::Terseåªä¼æ6è¡ã
è¿ä¸ªæ¨¡å对æ£å¨ç¼åèªå·±çå端ç¨åºï¼ææ- £å¨æ·±å¥Perlå鍿ºå¶ç人们æ¥è¯´æ¯é常æç¨çã对æ®éç¨åºåæ¥è¯´å没ä»ä¹ç¨ã
B::Xref
è¿ä¸ªæ¨¡åæå°ä¸ä¸ªæ¥è¡¨ååºå¨ç¨åºä¸åªéå®ä¹å使ç¨äºåªäºåéï¼å- ç¨åºææ ¼å¼ï¼æ¥è¡¨è¿ä¼ååºç¨åºè£å¥ç模åãè¦ç¥é详ç»çä½¿ç¨æ¹æ³ï¼è¯·åè "The Cross Referencing Back End" ã
KNOWN PROBLEMS å·²ç¥çé®é¢
ç®å C å端ç®ååªä¿å以åç¬¦åæ°åå½åçç±»å说æ
ä¼åç C å端ä¼ä¸ºä¸äºä¸è¯¥ä¸ºä¹è¾åºç模åï¼æ¯å¦è¯´ DirHandleï¼è¾åºä»£ç ãèä¸å®ä¸å¤ªå¯è½æ£ç¡®å°å¤çæ£å¨æ§è¡çåç¨åºå¤é¨çgotoè¯- å¥ï¼goto &sub is OKï¼ãç®å "goto LABEL" è¯å¥å¨è¿ä¸ªå端ä¸- å®å¨ä¸ä¼å·¥ä½ãä»è¿ä¼çæè®©C ç¼è¯å¨å¤´çææ¯ç巨大çåå§å彿°ã妿æè¿ä¸ªåå§å彿°åå²å¼æ¯è½å¾å°æ¯ç®åæ´å¥½çææçãå¦å¤çé®é¢åæ¬ï¼å¤çæç¬¦å·çæ°å- ¦é®é¢æ¶ä¸è½æ£ç¡®å·¥ä½ï¼ä¸äºæä½ç 妿æç§é»è®¤çæä½ç æºå¶å¤çä¹ä¼æéæ- £å¸¸çç»æã
BEGIN{} åä¼å¨ç¼è¯ä½ ç代ç çæ¶å被æ§è¡ãææçå¨BEGIN{} ä¸- åå§åçå¤é¨ç¶æï¼å¦æå¼çæä»¶ï¼åå§çæ°æ®åºè¿ç»ççï¼ä¼æä¸æ- £ç¡®ç表ç°ã为äºè§£å³è¿ä¸ªé®é¢ï¼Perlä¸åæä¾äºä¸ä¸ª INIT{} 忥坹åºç¨åºç¼è¯ä¹åï¼æ- £å¼è¿è¡ä¹åè¦æ§è¡ç飿®µä»£ç ãæ§è¡çé¡ºåºæ¯ï¼BEGIN{}, (å端ç¼è¯ç¨åºå¯è½è¿æ¶ä¼ä¿åç¶æ), INIT{}, ç¨åºè¿è¡, END{}ã
AUTHOR ä½è
è¿ç¯æç« æåæ¯ç± Nathan Torkington ç¼åï¼ç°å¨ç±é®ä»¶å表(perl5-porters@perl.org.)ç»´æ¤
è¯è
éé(sunny65535) <sunny65535@263.net>
è·
æ¬é¡µé¢ä¸æçç±ä¸æ
man
æå页计åæä¾ã
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh