Provided by: manpages-zh_1.6.3.2-1_all bug

NAME

       perlfaq - Perl 常問問題集 (2003/01/31 17:37:17)

DESCRIPTION 描述

       perlfaq 按照主題劃分爲多個文檔,在本文檔的末尾有一個目錄。

       Where to get the perlfaq 如何取得這份文件?

       這份文件會定期投到 comp.lang.perl.misc。也可以在許多網站上找到它,例如
       http://www.perldoc.com/ 還有 http://faq.perl.org/ 譯者注:兩隻老虎工作室的位置是
       http://2Ti.com/cgi-bin/2T/perl/ 還有 ftp://www.math.ncu.edu.tw/pub/staff/chenym/FAQ/Perl/
       還有 <pailing@2Ti.com>

       How to contribute to the perlfaq  如何爲 perlfaq 做貢獻?

       你可以將更正,擴充以及建議以郵件方式發送到 perlfaq-workers@perl.org .
       這個地址不能用來提問題,它只用來修正當前的 FAQ。如果有問題那麼投遞到新聞組
       comp.lang.perl.misc。可以在 http://cvs.perl.org/cvsweb/perlfaq/ 查看源碼樹
       (它是在主源碼樹之外)。CVS 倉庫記錄了對 FAQ 的所有改變。

       What will happen if you mail your Perl programming problems to the authors
       如果把編程問題寄給作者怎麼樣?

       作者大概不會理會您所提的問題,除非您是在建議把一些新問題加進
       FAQ去,但如果是這樣的話這些問題當初就該寄到 perlfaq-workers@perl.com 處纔對。

       您應該已經閱讀了這份 FAQ 的第二部分,您應該知道 comp.lang.perl.misc
       纔是尋求免費建議的適當地方。如果您的問題真的很重要而且您急着要得到正確解答,那麼您該請一個顧問。

Credits 致謝

       最初的 perlfaq 由 Tom Christiansen 完成,接着在 Tom 和 Nathan Torkington
       的合作下得以擴展。當前的文檔由 perlfaq-workers (perlfaq-workers@perl.org)
       進行維護,很多人貢獻了解答,更正和評註。

Author and Copyright Information

       Copyright (c) 1997-2003 Tom Christiansen, Nathan Torkington, and other contributors noted
       in the answers.

       All rights reserved.

       Bundled Distributions

       This documentation is free; you can redistribute it and/or modify it under the same terms
       as Perl itself.

       Irrespective of its distribution, all code examples in these files are hereby placed into
       the public domain.  You are permitted and encouraged to use this code in your own programs
       for fun or for profit as you see fit.  A simple comment in the code giving credit would be
       courteous but is not required.

       Disclaimer

       This information is offered in good faith and in the hope that it may be of use, but is
       not guaranteed to be correct, up to date, or suitable for any particular purpose
       whatsoever.  The authors accept no liability in respect of this information or its use.

Table of Contents 目錄

       perlfaq  - 本文檔
       perlfaq1 - 有關 Perl 的一般問題
       perlfaq2 - 獲取和學習 Perl
       perlfaq3 - 編程工具
       perlfaq4 - 數據操作
       perlfaq5 - 文件和格式
       perlfaq6 - 正則表達式
       perlfaq7 - 綜合的問題
       perlfaq8 - 系統交互
       perlfaq9 - 網絡

The Questions 問題

       perlfaq1: 有關 Perl 的一般問題

       有關 Perl 的一般的,非技術層次的問題

       ·   什麼是 Perl?

       ·   誰對 Perl 提供支持?誰開發了它?爲什麼它是自由的?

       ·   我該用哪一個版本的 Perl?

       ·   perl4 和 perl5 各代表什麼?

       ·   perl6 是什麼?

       ·   Perl的發展已穩定了嗎?

       ·   Perl難學嗎?

       ·   Perl和其他的程設語言比起來如何?例如 Java, Python, REXX, Scheme,或 Tcl?

       ·   我可以用 Perl來做【某種差事】嗎?

       ·   哪些場合下不適合用 Perl?

       ·   「perl」和「Perl」有什麼不同?

       ·   Perl程式應算是 program還是 script?

       ·   JAPH 是什麼?

       ·   到哪兒可拿到 Larry Wall 的智慧諷語 (witticisms)?

       ·   我要如何取信、說服我的系統管理者/上司/屬下使用第 5/5.8.3 版的
           Perl,而不去用其他的語言?

       perlfaq2: 獲取和學習 Perl

       從哪裏尋找 Perl 的源程序和文檔,支持以及相關事項

       ·   哪些平臺上有 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 的郵件列表?

       ·   comp.lang.perl.misc 的檔案庫

       ·   如何購買商業版本的 Perl?

       ·   如果發現 bugs要向何處報告?

       ·   什麼是 perl.com? Perl Mongers? pm.org? perl.org? cpan.org?

       perlfaq3: 編程工具

       編程工具和編程支持

       ·   我如何作 (任何事)?

       ·   如何以交互的方式使用 Perl?

       ·   有 Perl shell嗎?

       ·   怎樣查找我的系統中安裝了哪些模塊

       ·   如何替我的 Perl 程式除蟲?

       ·   如何檢測 (profile) 我的 perl 程式?

       ·   如何替我的 Perl程式作交叉參考 (cross-reference)?

       ·   有 Perl專用的美化列印程式 (pretty-printer)嗎?

       ·   有 Perl的 ctags 嗎?

       ·   有沒有一個 IDE 或圖形界面的 Perl 編輯器?

       ·   哪兒有 vi 用的 Perl 宏?

       ·   給 emacs用的 perl模式又要去哪抓呢?

       ·   如何在 Perl裏使用 curses?

       ·   X或 Tk如何與 Perl配合呢?

       ·   如何不靠 CGI或 Tk 幫助作出簡單的目錄(選單)?

       ·   如何讓我的 Perl程式跑得更快些?

       ·   如何讓我的 Perl 程序少用一些內存?

       ·   把局部變量的引用返回是不安全的做法嗎?

       ·   我如何釋放一個數組或散列以縮小我的程式尺寸?

       ·   如何讓我的 CGI腳本 (script)執行起來更有效率?

       ·   如何隱藏 Perl程式的原始碼?

       ·   如何把我的 Perl程式碼編譯成 byte code或 C?

       ·   怎樣把 Perl 編譯成 Java?

       ·   如何才能讓 "#!perl" 在 [MS-DOS,NT,...] 下起作用?

       ·   我能利用命令行寫出有用的程式嗎?

       ·   爲何一行的 perl 程式無法在我的 DOS/Mac/VMS系統上運作?

       ·   我得去哪裏學 Perl的 CGI或是 Web程式設計呢?

       ·   從哪裏可以學習面向對象的 Perl 編程?

       ·   從哪裏可以學習將 Perl 與 C 連接?[h2xs, xsubpp]

       ·   我已經閱讀了 perlembed,perlguts 等等,但是還是不能在我的 C 程序中嵌入
           perl;我作錯了什麼?

       ·   我試着運行我的腳本時,看到了這樣的消息。它是什麼意思?

       ·   什麼是 MakeMaker?

       perlfaq4: 數據操作

       操縱數字,日期,字符串,數組,散列以及各種其他數據類型。

       ·   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()?  Trig functions?

       ·   How do I convert between numeric representations?

       ·   Why doesn't & work the way I want it to?

       ·   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?

       ·   How do I get a random number between X and Y?

       ·   How do I find the day or week of the year?

       ·   How do I find the current century or millennium?

       ·   How can I compare two dates and find the difference?

       ·   How can I take a string and turn it into epoch seconds?

       ·   How can I find the Julian Day?

       ·   How do I find yesterday's date?

       ·   Does Perl have a Year 2000 problem?  Is Perl Y2K compliant?

       ·   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 or change N characters 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]?

       ·   How do I strip blank space from the beginning/end of a string?

       ·   How do I pad a string with blanks or pad a number with zeroes?

       ·   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 <<HERE documents work?

       ·   What is the difference between a list and an array?

       ·   What is the difference between $array[1] and @array[1]?

       ·   How can I remove duplicate elements from a list or array?

       ·   How can I tell whether a certain element is contained in a list or array?

       ·   How do I compute the difference of two arrays?  How do I compute the intersection of
           two arrays?

       ·   How do I test whether two arrays or hashes are equal?

       ·   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?

       ·   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?

       ·   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?

       ·   How do I pack arrays of doubles or floats for XS code?

       perlfaq5: 文件和格式

       I/O and the "f" issues: filehandles, flushing, formats, and footers.

       ·   How do I flush/unbuffer an output 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 can I use Perl's "-i" option from within a program?

       ·   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 use a filehandle indirectly?

       ·   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 a 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?

       ·   Why 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?

       ·   All I want to do is append a small amount of text to the end of a file.  Do I still
           have to use locking?

       ·   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 an entire file all 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 whether there's a character waiting on a filehandle?

       ·   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?

       ·   Why do I get weird spaces when I print an array of lines?

       perlfaq6: 正則表達式

       模式匹配和正則表達式。

       ·   我該如何使用正規表示式纔不至於寫出不合語法且難以維護的程式碼?

       ·   我無法匹配超過一行的內容,哪裏出了問題?

       ·   我如何取出位於不同行的兩個模式間之內容?

       ·   我把一個正規表示式放入 $/但卻沒有用。錯在哪裏?

       ·   如何在 LHS端【譯註:式子中運算元左端部份】作不區別大小寫式的替換,但在
           RHS端【右端】保留大小寫區別?

       ·   如何使 "\w" 對應到附重音記號 (accented)的字元?

       ·   如何作一個適合不同 locale【譯註:語言環境,國家地區在文字編碼上各自的慣例】的
           "/[a-zA-Z]/" 對應?

       ·   在一個正規表示式裏如何引入 (quote) 變量?

       ·   "/o" 到底是幹麼用的?

       ·   如何使用正規表示式將檔案中 C語言樣式的註解刪掉?

       ·   我能用 Perl的正規表示式去對應成對的符號嗎?

       ·   有人說正規表示式很貪婪,那是什麼意思?該如何避免它所帶來的問題?

       ·   如何處理每一行的每個字?

       ·   我如何印出文字出現頻率或行出現頻率的綱要?

       ·   如何能作近似對應?

       ·   我如何有效率地一次對應多個正規表示式?

       ·   爲何我用 "\b" 作字界搜尋時會失敗呢?

       ·   爲什麼每當我用 $&, $`,或 $'時程式的速度就慢下來了呢?

       ·   正規表示式中的 "\G" 能給我什麼好處?

       ·   Perl正規表示引擎是 DFA 或 NFA?它們是 POSIX 相容的嗎?

       ·   在無返回值上下文中用 grep或 map有什麼不對?

       ·   如何對應多位元組字母所構成的字串?

       ·   如何匹配用戶提供的模式?

       perlfaq7: 綜合的問題

       綜合的 Perl 語言問題,不適於在其他所有段落中討論的問題

       ·   我能拿到 Perl的 BNF/yacc/RE嗎?

       ·   $@%*這些符號是什麼意思?我怎麼知道何時該使用他們呢?

       ·   字串加引號或使用分號及逗號是否絕對必要/還是完全沒必要?

       ·   我如何跳過一些傳回值?

       ·   我如何暫時濾掉警告訊息?

       ·   什麼是一個擴充 (extension)?

       ·   爲何 Perl運算子的優先順序和 C的不一樣?

       ·   我如何聲明/創建一個數據結構?

       ·   如何創建一個模塊?

       ·   如何創建一個類?

       ·   如何知道一個變量是否是污染的?

       ·   什麼是閉包?

       ·   什麼是變量自殺,我應該怎樣防止它?

       ·   如何傳遞/返回一個{函數 Function, 文件句柄 FileHandle, 數組 Array, 散列 Hash, 方法
           Method, 正則表達式 Regex}?

       ·   如何創建一個靜態變量?

       ·   動態和靜態作用域有什麼區別?local()my() 呢?

       ·   在存在同名內部變量的作用域中,如何存取一個動態變量?

       ·   深連接和淺連接有什麼不同?

       ·   爲什麼 "my($foo) = <FILE>;" 不工作?

       ·   如何重定義一個內建函數,操作符 或者方法?

       ·   調用函數時 &foo 和 foo() 的形式有什麼不同?

       ·   如何創建一個分支語句?

       ·   如何捕獲對未定義變量,函數或方法的訪問?

       ·   爲什麼找不到包含在同一個文件中的方法?

       ·   如何找到當前的包?

       ·   如何註釋掉大塊的 perl 代碼?

       ·   如何清空一個包?

       ·   如何使用變量值作爲一個變量名?

       ·   "bad interpreter" 是什麼意思?

       perlfaq8: 系統交互

       進程間通信 (IPC), 用戶界面控制 (鍵盤,屏幕和指點設備)。

       ·   如何找出正在運行的操作系統?

       ·   爲什麼 exec() 不返回?

       ·   如何對鍵盤/螢幕/滑鼠做些花樣?

       ·   如何打印有顏色的內容?

       ·   如何只讀取一個鍵而不等待按下回車?

       ·   如何檢測鍵盤上已有輸入?

       ·   如何清屏?

       ·   如何獲取屏幕大小?

       ·   如何向使用者詢問密碼?

       ·   如何讀寫串口?

       ·   如何解碼加密的口令文件?

       ·   如何在後臺開啓進程?

       ·   如何截獲控制字符/信號?

       ·   在 Unix 系統中如何修改 shadow 文件?

       ·   如何設置時間和日期?

       ·   如何 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 一個守護進程?

       ·   如何知道自己是否在交互地運行?

       ·   如何爲緩慢的事件設置超時?

       ·   如何設置 CPU 限額?

       ·   如何避免在 Unix 系統中產生殭屍進程?

       ·   如何使用 SQL 數據庫?

       ·   如何使 system() 在收到 control-C 時退出?

       ·   如何無阻塞地打開一個文件?

       ·   如何從 CPAN 安裝模塊?

       ·   require 和 use 的區別是什麼?

       ·   如何設置我自己的模塊/庫路徑?

       ·   如何將我自己的程序的路徑加入到模塊/庫搜索路徑中?

       ·   如何在運行時將一個目錄加入到我的 include 路徑中?

       ·   什麼是 socket.ph,從哪兒可以得到它?

       perlfaq9: 網絡

       網絡通信,互聯網以及少量有關 web 的內容

       ·   一個 CGI 腳本的迴應的正確格式是什麼?

       ·   我的 CGI 腳本從命令行執行正常,但是在瀏覽器中不行 (500 Server Error)。

       ·   如何從 CGI 程序中得到好一點的錯誤提示?

       ·   如何將字符串中的 HTML 刪除?

       ·   如何展開 URL?

       ·   如何從用戶的機器上下載文件?如何打開其他機器上的文件?

       ·   如何在 HTML 添加一個彈出菜單?

       ·   如何獲取 HTML 文件?

       ·   如何根據提交的內容自動生成一個 HTML ?

       ·   如何解碼或創建 web 中的 %-encoding?

       ·   如何重定向到其他頁面?

       ·   如何爲我的網頁加上密碼?

       ·   如何用 Perl 修改我的 .htpasswd 和 .htgroup 文件?

       ·   如何確保用戶不會在表單中輸入使我的 CGI 腳本作壞事的值?

       ·   如何解釋一個郵件頭?

       ·   如何解碼一個 CGI 表單?

       ·   如何檢測一個有效的郵件地址?

       ·   如何解碼一個 MIME/BASE64 字符串?

       ·   如何返回用戶的郵件地址?

       ·   如何發郵件?

       ·   如何使用 MIME 來爲郵件消息增加附件?

       ·   如何讀郵件?

       ·   如何找到我的主機名/域名/IP 地址?

       ·   如何獲取一篇新聞文章或活動的新聞組?

       ·   如何獲取/上傳一個 FTP 文件?

       ·   如何進行遠程過程調用 RPC ?

譯者

       蕭百齡,兩隻老虎工作室,bbbush

       

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh