随着新发行的 alpha版 Perl编译器(它不在一般标准套件里)而来的 B::Xref模组可 以替你的 Perl程式制作 cross-reference报告。用法是:
perl -MO=Xref[,OPTIONS] foo.pl
--------------------------------------------------------------------------------
有 Perl专用的美化列印程式 (pretty-printer)吗?
C有 indent(1)可以将原始码格式美化,但 Perl并没有能做得像它那麽好的东西。扫瞄器 (scanner) 和分析器 (parser) 间复杂的反馈 (feedback)(把 vgrind 和 emacs等程式搞混的就是这反馈)使得撰写一个独立的 Perl 分析器成了一项艰巨的挑战。
当然,若你直接照 perlstyle里面的指示写程式,就根本没有必要重新安排格式。
你所用的编辑器可以并也应能帮你把原始码的格式弄漂亮些。像 emacs的 perl-mode就能帮你把大部分 (但非全部)的程式码排列得漂亮些,而其它普通的编辑器也能提供一定程度的协助。
如果你试着使用 vgrind程式从雷射印表机印出漂亮的原始码,可以参考:
http://www.perl.com/CPAN/doc/misc/tips/working.vgrind.entry ,但是碰到复杂的程式码可能就不能全然令人满意了。 --------------------------------------------------------------------------------
有 Perl的 ctags吗?
有个简单的在
http://www.perl.com/CPAN/authors/id/TOMC/scripts/ptags.gz 也许符合你的需要。 --------------------------------------------------------------------------------
哪里有 vi用的 Perl巨集?
在
ftp://ftp.perl.com/pub/vi/toms.exrc有完整的 Tom Christiansen之 vi设定档, 它是给 vi模拟器用的标准测试档 (standard benchmark file)。它与 nvi配合得最好,巧的是,这个出自 Berkeley的编辑器也可以内嵌一个 Perl直译器 --参看 http://www.perl.com/CPAN/src/misc。 --------------------------------------------------------------------------------
给 emacs用的 perl模式又要去哪抓呢?
从大约 Emacs 19.22版 (version 19 patchlevel 22)起,已内含了 perl-mode.el及 perl 除虫器的支援。它们应该会和标准的 Emacs 19版一起出货。
在 perl原始码的目录下,你会找到一个叫作 ``emacs'' 的目录,里面包括一个 cperl-mode 可以把程式中的关键字上色、提供内文相关的协助以及其它方便的功能。
注意:``main'foo''(其中的单引号)会让 emacs的 perl-mode生病,并且会弄乱内 缩 (indentation) 与精华 (hilighting)。不过你本来就该用 ``main::foo''的 (译者按: main'foo 是表示模组或 package的旧式写法;新式的 [perl5的]写法是 main::foo)。
--------------------------------------------------------------------------------
如何在 Perl里使用 curses?
CPAN里的 Curses模组提供了一个通往 curses 程式库的动态载入物件模组介面。
--------------------------------------------------------------------------------
X或 Tk如何与 Perl配合呢?
Tk这个完全以 Perl 为基础,物件导向化的介面,让你不用学 Tcl也可以使用 Tk工具组。Sx则是 Athena Widget set专用的介面。两者都可在 CPAN取得。
--------------------------------------------------------------------------------
如何不靠 CGI或 Tk之助作出简单的目录(选单)?
http://www.perl.com/CPAN/authors/id/SKUNZ/perlmenu.v4.0.tar.gz 是个以 curses为基础的模组,可以达成你的要求。
--------------------------------------------------------------------------------
我可以动态地将 C常式载入 Perl吗?
若你的系统架构有支援的话,标准 perl 套件便应该有此功能(介由 DynaLoader 这个模组)。详情请参看 perlxstut 。
--------------------------------------------------------------------------------
什麽是 undump?
看下个问题。
--------------------------------------------------------------------------------
如何让我的 Perl程式跑得更快些?
最好是能设计一个较好的演算法 (algorithm),这通常会让程式有大不相同的表现。 骆驼书第八章里有些你或许想知道的增进效率小技巧。
其它方法包括自动载入较少使用的 Perl 程式码。请参看标准 perl 套件中的 AutoSplit及 AutoLoader模组的用法。或当你能断定程式执行效率的瓶颈在何处时,用 C来写那个部份,就像用组合语言来撰写 C程式的瓶颈部份一样。与此法相近的是使用以 C撰写瓶 颈部份的模组 (例如 CPAN中的 PDL 模组)。
在某些情况下,使用後端的编译器把程式编译成位元码 (byte code)(可节省编译时间) 或是将 perl程式转编译为 C程式的作法值得一试;这些作法绝对会节省编译的时间并且有时能省一些[但不多]执行时间 。请参考“编译你的 Perl程式”这个问题的答案。
如果你目前是将你的 perl直译器动态连结到 libc.so的话,重新作一份静态连结到 libc.a的 perl直译器可以提高 10-25%的执行效能。虽然这会使你的 perl直译器变得更胖,但你的 Perl程式 (及程式设计者) 或许会因此而感谢你。详情请参考 perl标准套件原始码版本中的 INSTALL 档案。
一些未经证实的报告中宣称有些使用 sfio的 Perl直译器表现得比没有用 sfio的还好 (针对於 IO频繁的应用程式)。想试试看?参考 perl套件原始程式版中的 INSTALL 档案,尤其是 ``Selecting File IO mechanisms''这一段。
使用 undump程式把编译後的档案格式存到硬碟里以加快执行的速度已经是老掉牙的手法了。它已不再是个可行的方法,因为这方法只有几种平台能用,况且它终究不是个治本之 道。
--------------------------------------------------------------------------------
如何让我的 Perl程式吃少一点的记忆体?
当问题变成时间与空间的交易时, Perl 几乎总是用记忆体来帮忙解决问题。 Perl中的纯量 (Scalar) 耗掉的记忆体比 C中的字串形态还多,阵列又更多, 更别谈杂凑阵列了 (Hashes)。关於这一点,我们当然还有很多工作得作,近来发布的版本,已开始针对这些问题做改进了。例如, 5.004 版中, 重复的杂凑阵列索引值 (duplicate hash keys) 由使用它的杂凑阵列共用,这样就不用再重新定份位置给它了。
在某些情况下,使用 substr()或 vec()来模拟阵列有很大的好处。例如,一个有上千 个布林代数值的阵列将占用至少 20,000位元组的空间,但是它可以被转变为一个 125位元组的位元向量 (bit vector)以节省相当可观的记忆体。标准套件中的 Tie::SubstrHash模组也能够帮助特定形态的资料结构节省些记忆体。若你正在和一些特殊的资料结构奋战 (例如,矩阵),用 C写的模组所耗掉的记忆体可能低於同功能并用 Perl写的模组。