perlfaq - perl常问问题集
目录
perlfaq
篇名
概述
如何取得这份文件?
如何替这份文件尽点力?
如果把写 Perl程式时所遇到的问题寄去问作者会有什麽後果?
功劳
作者及版权事宜
非商业性之翻印及转载
商业性之翻印及转载
声明
原文版更动记录
perlfaq1
篇名
概述
Perl是什麽?
谁对 perl提供支援?由谁负责发展?它为什麽是免费的?
我该用哪一个版本的 Perl?
perl4和 perl5各代表什麽?
Perl的发展已稳定了吗?
Perl难学吗?
Perl和其他的程式语言比起来如何?例如 Java, Python, REXX, Scheme,或 Tcl?
我可以用 Perl来做【某种差事】吗?
哪些场合下不适合用 Perl?
「perl」和「Perl」有什麽不同?
Perl程式应算是 program还是 script?
JAPH是什麽?
到哪儿可拿到 Larry Wall的智慧讽语 (witticisms)?
我要如何取信、说服我的系统管理者/上司/属下使用第 5/5.004版的 Perl,而不去用其他的语言?
作者及版权事宜
perlfaq2
篇名
概述
哪些平台上有 Perl?要到哪里去找?
要如合取得以执行档形式发行的 Perl?
我的系统里没有 C编译器。要如何编译 perl?
我直接将 Perl的执行档从一台机器上复制到另一台机器上,但是程式跑不起来。
我抓回了原始码,试着编译 perl,但是 gdbm/dynamic loading/malloc/linking/...部分失败。要如何将它搞定?
Perl有哪些模组和延伸? CPAN是什麽? CPAN/src/...又代表什麽?
是不是有一个经 ISO【国际标准局】或 ANSI【美国国家标准局】认可的 Perl版本?
Perl的相关资料要上哪儿找?
USENET上有哪些专门讨论 Perl的新闻讨论群?问题该投到哪里?
如果我想投程式原始码,该投到哪个板子上?
Perl书籍
和 Perl有关的杂志
网路上的 Perl:透过 FTP和 WWW
有哪些讨论 Perl的邮递论坛(mailing lists)?
存有 comp.lang.perl.misc posts的档案库
Perl训练课程
如何购买商业版本的 Perl?
如果发现 bugs要向何处报告?
什麽是 perl.com、 perl.org,和 Perl Institute?
如何学着用 Perl来写物件导向程式?
作者及版权事宜
perlfaq3
篇名
概述
我如何作 (任何事)?
如何以互动的方式使用 Perl?
有 Perl shell吗?
如何替我的 Perl程式除虫?
如何检测 (profile)我的 perl程式?
如何替我的 Perl程式作交叉参考 (cross-reference)?
有 Perl专用的美化列印程式 (pretty-printer)吗?
有 Perl的 ctags吗?
哪里有 vi用的 Perl巨集?
给 emacs用的 perl模式又要去哪抓呢?
如何在 Perl里使用 curses?
X或 Tk如何与 Perl配合呢?
如何不靠 CGI或 Tk之助作出简单的目录(选单)?
我可以动态地将 C常式载入 Perl吗?
什麽是 undump?
如何让我的 Perl程式跑得更快些?
如何让我的 Perl程式吃少一点的记忆体?
把指标传回到区域资料是不安全的做法吗?
我如何释放一个阵列或杂凑阵列以缩小我的程式尺寸?
如何让我的 CGI脚本 (script)执行起来更有效率?
如何隐藏 Perl程式的原始码?
如何把我的 Perl程式码编译成 byte code或 C?
如何才能让 '#!perl'在 [MS-DOS,NT,...]下作用?
我能利用命令列写出有用的程式吗?
为何一行的 perl程式无法在我的 DOS/Mac/VMS系统上运作?
我得去哪里学 Perl的 CGI或是 Web程式设计呢?
在哪可以学到用 Perl作物件导向程式设计?
哪里可以学到将 C与 Perl相连结? [h2xs, xsubpp]
我已经读了 perlembed, perlguts,等等,但我仍然无法将 perl嵌入我的
当我试着执行我的程式时,我收到某项讯息。它代表什麽意思?
什麽是 MakeMaker?
作者与版权事宜
perlfaq4
NAME
DESCRIPTION
Data: Numbers
Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
Why isn't my octal data interpreted correctly?
Does perl have a round function? What about ceil() and floor()?
How do I convert bits into ints?
How do I multiply matrices?
How do I perform an operation on a series of integers?
How can I output Roman numerals?
Why aren't my random numbers random?
Data: Dates
How do I find the week-of-the-year/day-of-the-year?
How can I compare two date strings?
How can I take a string and turn it into epoch seconds?
How can I find the Julian Day?
Does Perl have a year 2000 problem?
Data: Strings
How do I validate input?
How do I unescape a string?
How do I remove consecutive pairs of characters?
How do I expand function calls in a string?
How do I find matching/nesting anything?
How do I reverse a string?
How do I expand tabs in a string?
How do I reformat a paragraph?
How can I access/change the first N letters of a string?
How do I change the Nth occurrence of something?
How can I count the number of occurrences of a substring within a string?
How do I capitalize all the words on one line?
How can I split a [character] delimited string except when inside [character]? (Comma-separated files)
How do I strip blank space from the beginning/end of a string?
How do I extract selected columns from a string?
How do I find the soundex value of a string?
How can I expand variables in text strings?
What's wrong with always quoting "$vars"?
Why don't my <
Data: Arrays
What is the difference between $array[1] and @array[1]?
How can I extract just the unique elements of an array?
How can I tell whether an array contains a certain element?
How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
How do I find the first array element for which a condition is true?
How do I handle linked lists?
How do I handle circular lists?
How do I shuffle an array randomly?
How do I process/modify each element of an array?
How do I select a random element from an array?
How do I permute N elements of a list?
How do I sort an array by (anything)?
How do I manipulate arrays of bits?
Why does defined() return true on empty arrays and hashes?
Data: Hashes (Associative Arrays)
How do I process an entire hash?
What happens if I add or remove keys from a hash while iterating over it?
How do I look up a hash element by value?
How can I know how many entries are in a hash?
How do I sort a hash (optionally by value instead of key)?
How can I always keep my hash sorted?
What's the difference between "delete" and "undef" with hashes?
Why don't my tied hashes make the defined/exists distinction?
How do I reset an each() operation part-way through?
How can I get the unique keys from two hashes?
How can I store a multidimensional array in a DBM file?
How can I make my hash remember the order I put elements into it?
Why does passing a subroutine an undefined element in a hash create it?
How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
How can I use a reference as a hash key?
Data: Misc
How do I handle binary data correctly?
How do I determine whether a scalar is a number/whole/integer/float?
How do I keep persistent data across program calls?
How do I print out or copy a recursive data structure?
How do I define methods for every class/object?
How do I verify a credit card checksum?
AUTHOR AND COPYRIGHT
perlfaq5
NAME
DESCRIPTION
How do I flush/unbuffer a filehandle? Why must I do this?
How do I change one line in a file/delete a line in a file/insert a line in the middle of a file/append to the beginning of a file?
How do I count the number of lines in a file?
How do I make a temporary file name?
How can I manipulate fixed-record-length files?
How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
How can I set up a footer format to be used with write()?
How can I write() into a string?
How can I output my numbers with commas added?
How can I translate tildes (~) in a filename?
How come when I open the file read-write it wipes it out?
Why do I sometimes get an "Argument list too long" when I use <*>?
Is there a leak/bug in glob()?
How can I open a file with a leading ">" or trailing blanks?
How can I reliably rename a file?
How can I lock a file?
What can't I just open(FH, ">file.lock")?
I still don't get locking. I just want to increment the number in the file. How can I do this?
How do I randomly update a binary file?
How do I get a file's timestamp in perl?
How do I set a file's timestamp in perl?
How do I print to more than one file at once?
How can I read in a file by paragraphs?
How can I read a single character from a file? From the keyboard?
How can I tell if there's a character waiting on a filehandle?
How do I open a file without blocking?
How do I create a file only if it doesn't exist?
How do I do a
tail -f
in perl?
How do I dup() a filehandle in Perl?
How do I close a file descriptor by number?
Why can't I use "C:\temp\foo" in DOS paths? What doesn't `C:\temp\foo.exe` work?
Why doesn't glob("*.*") get all the files?
Why does Perl let me delete read-only files? Why does
-i
clobber protected files? Isn't this a bug in Perl?
How do I select a random line from a file?
AUTHOR AND COPYRIGHT
perlfaq6
篇名
概述
我该如何使用正规表示式才不至於写出不合语法且难以维护的程式码?
我无法对应到超过一行的内容,哪里出了问题?
我如何取出位於不同行的两个模式间之内容?
我把一个正规表示式放入 $/但却没有用。错在哪里?
如何在 LHS端【译注:式子中运算元左端部份】作不区别大小写式的替换,但在 RHS端【右端】保留大小写区别?
如何使
\w
对应到附重音记号 (accented)的字元?
如何作一个适合不同 locale【译注:国家、地区在文字编码上各自的惯例】的
/[a-zA-Z]/
对应?
在一个正规表示式里如何引入 (quote)变数?
/o
到底是干麽用的?
如何使用正规表示式将档案中 C语言样式的注解删掉?
我能用 Perl的正规表示式去对应成对的符号吗?
有人说正规表示式很贪婪,那是什麽意思?该如何避免它所带来的问题?
如何处理每一行的每个字?
我如何印出文字出现频率或行出现频率的纲要?
如何能作近似对应?
我如何有效率地一次对应多个正规表示式?
为何我用
\b
作字界搜寻时会失败呢?
为什麽每当我用 $&, $`,或 $'时程式的速度就慢下来了呢?
正规表示式中的
\G
能给我什麽好处?
Perl正规表示引擎是 DFAs或 NFAs?它们是 POSIX相容的吗?
在无递回的场合下用 grep或 map有什麽不对?
如何对应多位元组字母所构成的字串?
作者与版权事宜
perlfaq7
篇名
概述
我能拿到 Perl的 BNF/yacc/RE吗?
$@%*这些符号是什麽意思?我怎麽知道何时该使用他们呢?
字串加引号或使用分号及逗号是否绝对必要/还是完全没必要?
我如何跳过一些传回值?
我如何暂时滤掉警告讯息?
什麽是一个扩充 (extension)?
为何 Perl运算子的优先顺序和 C的不一样?
我如何宣告/生成一个资料结构 (structure)?
我如何创造出一个模组 (module)?
我如何创造一个类别 (class)?
我如何辨别一个变数是否被污染了(tainted)?
闭包 (closure)是啥?
何谓变数自杀而我又该如何防止它?
我如何传递/传回一个 {函数,档案把手,阵列,杂凑阵列,方法,和正规表现式}?
我如何生成一个静态变数?
动态与文字式(静态)范围界定 (scoping)有何不同? Local()和 my()呢?
当同一个范围中有一个文字式变数时,我该如何去撷取同名的动态变数?
所谓深连结与浅连结 (deep and shallow binding)间有何不同呢?
为何 "local($foo) =
;"无法正确地作用?
我如何重新定义一个内建函数、运算子或是方法?
用 &foo和 foo()的方式来呼叫一个函数有什麽不同?
我如何作一个 switch或 case叙述?
我如何抓到呼叫未定义变数/函数/方法的事件?
为什麽我的程式会找不到放在同一档案中的方法 (method)呢?
我如何找出目前所在的 package为何?
我如何将一大块 perl程式码变成注解?
作者与版权事宜
perlfaq8
篇名
概述
如何得知使用者正在哪个作业系统下执行我的 perl程式?
为什麽 exec()不会传值回来?
如何对键盘/萤幕/滑鼠做些花样?
如何向使用者询问密码?
如何对序列埠做读写动作?
如何逆解加密後的密码档案?
如何启动一个背景执行的程序?
如何捕捉控制字元/讯号?
如何更动 Unix系统上隐式密码档 (shadow password)的内容?
如何设定时间和日期?
如何能够针对小於一秒的时间做 sleep()或 alarm()的动作呢?
如何测量小於一秒的时间?
如何做 atexit()或 setjmp()/longjmp()的动作?(例外处理)
为何我的 sockets程式在 System V (Solaris)系统下不能用?「不支援本协定」这个错误讯息又是什麽意思?
如何从 Perl里呼叫系统中独特的 C函数?
在哪里可以找引入档来做 ioctl()或 syscall()?
为何 setuid perl程式会抱怨关於系统核心的问题?
如何打开对某程式既输入又输出的管道 (pipe)?
为何用 system()却得不到一个指令的输出呢?
如何补捉外部指令的 STDERR?
为何当管道开启失败时 open()不会传回错误讯息?
在输出值是空的情境里使用反向引号有何不对?
如何不经过 shell处理来呼叫反向引号?
为何给了 EOF(Unix上是 ^D,MS-DOS上是 ^Z)後我的程式就不能从 STDIN读取东西了呢?
如何把 shell程式转成 perl?
perl能处理 telnet或 ftp这种双向互动吗?
如何在 Perl里达到 Expect的功能?
有没有可能将 perl的指令列隐藏起来,以躲避像 "ps"之类的程式?
我在 perl script里 {更动目录,更改我的使用环境}。为何这些改变在程式执行完後就消失了呢?如何让我做的修改显露出来?
如何关闭一个程序的档案把手而不用等它完成呢?
如何 fork出一个背景执行 (daemon)程序?
如何使我的程式和 sh及 csh一起执行?
如何得知我是否正在互动模式下执行?
如何让一个缓慢的事件过时?
如何设定 CPU使用限制?
在 Unix系统上如何避免产生僵 程序 (zombies)?
如何使用一个 SQL资料库?
如何让 system()在收到 control-C後就离开?
如何开启一个档案但不阻挡其他程序的阅读?
如何安装一个 CPAN模组?
如何保有一份自己的模组/程式库目录?
如何把我的程式所在位置加入模组/程式库搜寻路径?
如何在执行时添加目录到自己的引入路径中?
如何从终端机一次抓进一个按键?如果用 POSIX模组时又该怎麽做?
作者、译者与版权
perlfaq9
篇名
概述
我的 CGI script可在指令列下执行但无法从浏览器执行。您能不能帮我修修看?
如何去除文章中的 HTML标签?
如何萃取 URLs?
如何从 user端上传资料?如何在另一台机器上开一个档案?
如何在 HTML中做 pop-up menu(跳出式选单)?
如何抓 HTML档案?
如何解开或产生 Web上那些冠 %的码?
如何【将 requests】转向到另一页去?
如何替网页加上密码?
要怎麽用 Perl来编辑 .htpasswd和 .htgroup这两个档案?
如何防范使用者藉由填我的 CGI表格来做坏事?
如何解读、萃取 email标头资料?
如何解译 CGI表格?
如何验证 email位址?
如何解 MIME/BASE64字串?
如何根据使用者帐户名称自动合成 email位址?
我的程式如何送/读 email?
如何找出我的主机名/网域名/IP位址?
如何抓新闻讨论群的文章或群组名录?
如何抓/丢 FTP档案?
如何用 Perl做 RPC?
作者及版权事宜