📄 perlfaq3.html
字号:
<HTML> <HEAD> <TITLE>perlfaq3</TITLE> </HEAD> <BODY background="gback.jpg"><H1>perlfaq3 - perl常问问题集,第叁篇</H1><p><p><H2><A NAME="INDEX">目录</A></H2><!-- INDEX BEGIN --><UL> <LI><A HREF="#_g_W">篇名</A> <LI><A HREF="#_z">概述</A> <UL> <LI><A HREF="#_p_">我如何作 (任何事)?</A> <LI><A HREF="#_p_H_Perl_">如何以互动的方式使用 Perl?</A> <LI><A HREF="#_Perl_shell_">有 Perl shell吗?</A> <LI><A HREF="#_p_Perl_">如何替我的 Perl程式除虫?</A> <LI><A HREF="#_p_profile_perl_">如何检测 (profile)我的 perl程式?</A> <LI><A HREF="#_p_Perl_e_">如何替我的 Perl程式作交叉参考 (cross-reference)?</A> <LI><A HREF="#_Perl_M_C_L_pret">有 Perl专用的美化列印程式 (pretty-printer)吗?</A> <LI><A HREF="#_Perl_ctags_">有 Perl的 ctags吗?</A> <LI><A HREF="#_vi_Perl_">哪里有 vi用的 Perl巨集?</A> <LI><A HREF="#_emacs_perl_S_n_h_">给 emacs用的 perl模式又要去哪抓呢?</A> <LI><A HREF="#_p_b_Perl_curses_">如何在 Perl里使用 curses?</A> <LI><A HREF="#X_Tk_p_P_Perl_t_X_O_">X或 Tk如何与 Perl配合呢?</A> <LI><A HREF="#_p_a_CGI_Tk_U_X_">如何不靠 CGI或 Tk之助作出简单的目录(选单)?</A> <LI><A HREF="#_i_H_A_a_N_C_J_Perl_">我可以动态地将 C常式载入 Perl吗?</A> <LI><A HREF="#_O_undump_">什麽是 undump?</A> <LI><A HREF="#_p_Perl_o_">如何让我的 Perl程式跑得更快些?</A> <LI><A HREF="#_p_Perl_Y_I_O">如何让我的 Perl程式吃少一点的记忆体?</A> <LI><A HREF="#_O_w_">把指标传回到区域资料是不安全的做法吗?</A> <LI><A HREF="#_p_C_C_H_Y">我如何释放一个阵列或杂凑阵列以缩小我的程式尺寸?</A> <LI><A HREF="#_p_CGI_script_">如何让我的 CGI脚本 (script)执行起来更有效率?</A> <LI><A HREF="#_p_Perl_l_X_">如何隐藏 Perl程式的原始码?</A> <LI><A HREF="#_p_Perl_X_s_byt">如何把我的 Perl程式码编译成 byte code或 C?</A> <LI><A HREF="#_p_perl_b_MS_DOS_N">如何才能让 '#!perl'在 [MS-DOS,NT,...]下作用?</A> <LI><A HREF="#_Q_R_O_C_g_X_">我能利用命令列写出有用的程式吗?</A> <LI><A HREF="#_perl_L_k_b_D">为何一行的 perl程式无法在我的 DOS/Mac/VMS系统上运作?</A> <LI><A HREF="#_o_h_Perl_CGI_O_We">我得去哪里学 Perl的 CGI或是 Web程式设计呢?</A> <LI><A HREF="#_b_i_H_Perl_V_">在哪可以学到用 Perl作物件导向程式设计?</A> <LI><A HREF="#_i_H_N_C_P_Perl_s_">哪里可以学到将 C与 Perl相连结? [h2xs, xsubpp]</A> <LI><A HREF="#_w_g_F_perlembed_perlguts_">我已经读了 perlembed, perlguts,等等,但我仍然无法将 perl嵌入我的</A> <LI><A HREF="#_A_Y">当我试着执行我的程式时,我收到某项讯息。它代表什麽意思?</A> <LI><A HREF="#_O_MakeMaker_">什麽是 MakeMaker?</A> </UL> <LI><A HREF="#_P_v_y">作者与版权事宜</A></UL><!-- INDEX END --><HR><P><H1><A NAME="_g_W">篇名</A></H1>perlfaq3 -程式设计工具(原文版 Revision: 1.22, Date: 1997/04/24 22:43:42.中译版 $Revision: 1.4 $, $Date: 1997/07/12 20:03:10 $)<P><P><HR><H1><A NAME="_z">概述</A></H1>这个部份回答了有关程式设计师的工具与程式设计方面的协助等相关问题。<P><P><HR><H2><A NAME="_p_">我如何作 (任何事)?</A></H2>你到 CPAN(见 <A HREF="perlfaq2.html" tppabs="http://202.96.217.5/~xiaoyi/perlfaq2.html">perlfaq2</A>)找过了吗?也许别人已经写了某个模组可以解决你的问题。你查过相关的说明文件了吗 (man pages)?以下是一份概要的索引:<P><PRE>物件 (Objects) <A HREF="../../tppmsgs/msgs0.htm#59" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlref.html">perlref</A>, <A HREF="../../tppmsgs/msgs0.htm#60" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlmod.html">perlmod</A>, <A HREF="../../tppmsgs/msgs0.htm#58" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlobj.html">perlobj</A>, <A HREF="../../tppmsgs/msgs0.htm#62" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perltie.html">perltie</A>资料结构 (Data Structures) <A HREF="../../tppmsgs/msgs0.htm#59" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlref.html">perlref</A>, <A HREF="../../tppmsgs/msgs0.htm#63" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perllol.html">perllol</A>, <A HREF="../../tppmsgs/msgs0.htm#64" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perldsc.html">perldsc</A>模组 (Modules) <A HREF="../../tppmsgs/msgs0.htm#60" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlmod.html">perlmod</A>, <A HREF="../../tppmsgs/msgs0.htm#65" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlmodlib.html">perlmodlib</A>, <A HREF="../../tppmsgs/msgs0.htm#66" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlsub.html">perlsub</A>正规表示法 (Regexps) <A HREF="../../tppmsgs/msgs0.htm#67" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlre.html">perlre</A>, <A HREF="../../tppmsgs/msgs0.htm#68" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlfunc.html">perlfunc</A>, <A HREF="../../tppmsgs/msgs0.htm#69" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlop.html">perlop</A>升级至 Perl5 (Moving to perl5) <A HREF="../../tppmsgs/msgs0.htm#70" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perltrap.html">perltrap</A>, perl与 C连结 (Linking w/C) <A HREF="../../tppmsgs/msgs0.htm#71" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlxstut.html">perlxstut</A>, <A HREF="../../tppmsgs/msgs0.htm#72" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlxs.html">perlxs</A>, <A HREF="../../tppmsgs/msgs0.htm#73" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlcall.html">perlcall</A>, <A HREF="../../tppmsgs/msgs0.htm#74" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlguts.html">perlguts</A>, <A HREF="../../tppmsgs/msgs0.htm#75" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlembed.html">perlembed</A>杂项 (Various) <A HREF="../../tppmsgs/msgs0.htm#76" tppabs="http://www.perl.com/CPAN/doc/FMTEYEWTK/index.html">http://www.perl.com/CPAN/doc/FMTEYEWTK/index.html</A> (不是说明文件,但还是很有用)</PRE><P><A HREF="../../tppmsgs/msgs0.htm#77" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perltoc.html#">perltoc</A>里有一份粗略的 perl 说明文件组的目录。<P><P><HR><H2><A NAME="_p_H_Perl_">如何以互动的方式使用 Perl?</A></H2>典型的作法是使用 <CODE>perldebug(1)</CODE>说明文件里提到的 Perl除虫器,在一个「空的」(译者:即不存在的)程式上执行,像这样:<P><PRE> perl -de 42</PRE><P>接下来所打入的任意合法 Perl程式码皆会立刻被评估。同时,你可以检查符号表 (symbol table)、取得堆叠的记录 (stack backtraces)、检视变数值、设定阻断点 (set breakpoints) 以及其他符号式除虫器 (symbolic debuggers) 所能作的动作。<P><P><HR><H2><A NAME="_Perl_shell_">有 Perl shell吗?</A></H2>基本上来说,没有。Shell.pm模组 (是 perl 标准套件之一)只是叫 perl 将非 Perl语言的命令当作 shell的命令来试着执行看看罢了。perl原始码套件中的 perlsh,功能简易,也很无趣,不过仍可能是你所要的。<P><P><HR><H2><A NAME="_p_Perl_">如何替我的 Perl程式除虫?</A></H2>你用过 <CODE>-w</CODE>吗?<P>你试过 <CODE>use strict</CODE>吗?<P>你是否检查过每个系统呼叫 (system call)所传回的值?<P>读了 <A HREF="../../tppmsgs/msgs0.htm#70" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perltrap.html#">perltrap</A>说明文件吗?<P>你试过 <A HREF="../../tppmsgs/msgs0.htm#78" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perldebug.html#">perldebug</A>里所提到的 Perl除虫器吗?<P><P><HR><H2><A NAME="_p_profile_perl_">如何检测 (profile)我的 perl程式?</A></H2>你该自 CPAN抓取 Devel::DProf 模组,并且使用 perl 标准套件所附的 Benchmark.pm。 Benchmark.pm让你测量程式码的某部份在执行上所花的时间,而 Devel::DProf则详细地替你分析哪一部份的程式用掉多少时间。<P><P><HR><H2><A NAME="_p_Perl_e_">如何替我的 Perl程式作交叉参考 (cross-reference)?</A></H2>随着新发行的 alpha版 Perl编译器(它不在一般标准套件里)而来的 B::Xref模组可 以替你的 Perl程式制作 cross-reference报告。用法是:<P><PRE> perl -MO=Xref[,OPTIONS] foo.pl</PRE><P><P><HR><H2><A NAME="_Perl_M_C_L_pret">有 Perl专用的美化列印程式 (pretty-printer)吗?</A></H2>C有 <CODE>indent(1)</CODE>可以将原始码格式美化,但 Perl并没有能做得像它那麽好的东西。扫瞄器 (scanner) 和分析器 (parser) 间复杂的反馈 (feedback)(把 vgrind 和 emacs等程式搞混的就是这反馈)使得撰写一个独立的 Perl 分析器成了一项艰巨的挑战。<P>当然,若你直接照 <A HREF="../../tppmsgs/msgs0.htm#79" tppabs="http://www.perl.org/CPAN/doc/manual/html/pod/perlstyle.html#">perlstyle</A>里面的指示写程式,就根本没有必要重新安排格式。<P>你所用的编辑器可以并也应能帮你把原始码的格式弄漂亮些。像 emacs的 perl-mode就能帮你把大部分 (但非全部)的程式码排列得漂亮些,而其它普通的编辑器也能提供一定程度的协助。<P>如果你试着使用 vgrind程式从雷射印表机印出漂亮的原始码,可以参考: <A HREF="../../tppmsgs/msgs0.htm#80" tppabs="http://www.perl.com/CPAN/doc/misc/tips/working.vgrind.entry">http://www.perl.com/CPAN/doc/misc/tips/working.vgrind.entry</A> ,但是碰到复杂的程式码可能就不能全然令人满意了。<P><P><HR><H2><A NAME="_Perl_ctags_">有 Perl的 ctags吗?</A></H2>有个简单的在 <AHREF="../../tppmsgs/msgs0.htm#81" tppabs="http://www.perl.com/CPAN/authors/id/TOMC/scripts/ptags.gz">http://www.perl.com/CPAN/authors/id/TOMC/scripts/ptags.gz</A>也许符合你的需要。<P><P><HR><H2><A NAME="_vi_Perl_">哪里有 vi用的 Perl巨集?</A></H2>在 <A HREF="../../tppmsgs/msgs0.htm#82" tppabs="ftp://ftp.perl.com/pub/vi/toms.exrc">ftp://ftp.perl.com/pub/vi/toms.exrc</A>有完整的 Tom Christiansen之 vi设定档, 它是给 vi模拟器用的标准测试档 (standard benchmark file)。它与 nvi配合得最好,巧的是,这个出自 Berkeley的编辑器也可以内嵌一个 Perl直译器 --参看 <A HREF="../../tppmsgs/msgs0.htm#83" tppabs="http://www.perl.com/CPAN/src/misc%a1%a3">http://www.perl.com/CPAN/src/misc。</A><P><P><HR><H2><A NAME="_emacs_perl_S_n_h_">给 emacs用的 perl模式又要去哪抓呢?</A></H2>从大约 Emacs 19.22版 (version 19 patchlevel 22)起,已内含了 perl-mode.el及 perl 除虫器的支援。它们应该会和标准的 Emacs 19版一起出货。<P>在 perl原始码的目录下,你会找到一个叫作 ``emacs'' 的目录,里面包括一个 cperl-mode可以把程式中的关键字上色、提供内文相关的协助以及其它方便的功能。<P>注意:``main'foo''(其中的单引号)会让 emacs的 perl-mode生病,并且会弄乱内 缩 (indentation) 与精华 (hilighting)。不过你本来就该用 ``main::foo''的 (译者按: main'foo 是表示模组或 package的旧式写法;新式的 [perl5的]写法是 main::foo)。<P><P><HR><H2><A NAME="_p_b_Perl_curses_">如何在 Perl里使用 curses?</A></H2>CPAN里的 Curses模组提供了一个通往 curses程式库的动态载入物件模组介面。<P><P><HR><H2><A NAME="X_Tk_p_P_Perl_t_X_O_">X或 Tk如何与 Perl配合呢?</A></H2>Tk这个完全以 Perl 为基础,物件导向化的介面,让你不用学 Tcl也可以使用 Tk工具组。Sx则是 Athena Widget set专用的介面。两者都可在 CPAN取得。<P><P><HR><H2><A NAME="_p_a_CGI_Tk_U_X_">如何不靠 CGI或 Tk之助作出简单的目录(选单)?</A></H2><A HREF="../../tppmsgs/msgs0.htm#84" tppabs="http://www.perl.com/CPAN/authors/id/SKUNZ/perlmenu.v4.0.tar.gz">http://www.perl.com/CPAN/authors/id/SKUNZ/perlmenu.v4.0.tar.gz</A> 是个以 curses为基础的模组,可以达成你的要求。<P><P><HR><H2><A NAME="_i_H_A_a_N_C_J_Perl_">我可以动态地将 C常式载入 Perl吗?</A></H2>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -