高階Perl

出版時(shí)間:2013-7  出版社:機(jī)械工業(yè)出版社  作者:Mark Jason Dominus  譯者:滕家海  
Tag標(biāo)簽:無(wú)  

前言

前言在編程圈子里有一句著名的俗語(yǔ),一個(gè)優(yōu)秀的Fortran程序員可以用任何語(yǔ)言寫(xiě)Fortran程序。然而,讓人悲哀的是,不管他們是否愿意,F(xiàn)ortran程序員用任何語(yǔ)言寫(xiě)Fortran程序。類似地,作為Perl程序員,我們也在用Perl寫(xiě)C程序,不管我們是否愿意。這讓人羞愧,因?yàn)镻erl是一門(mén)比C更富有表現(xiàn)力的語(yǔ)言。我們本可以做得更好,以C程序員夢(mèng)想不到的方式使用Perl,但是我們沒(méi)有那樣做。怎么會(huì)這樣呢?Perl的設(shè)計(jì)初衷是一方面作為C的替代品,另一方面作為UNIX腳本語(yǔ)言(如Bourne Shell和awk)的替代品。Perl最初的主要擁護(hù)者是UNIX系統(tǒng)管理員,他們熟悉C和UNIX腳本語(yǔ)言,因此自然地傾向把Perl程序?qū)懗深愃朴贑和awk的程序。Perl的發(fā)明人(Larry Wall)來(lái)自這個(gè)系統(tǒng)管理員社區(qū),還有Randal Schwartz,與Perl合著了《Programming Perl》,本書(shū)是第一本也仍然是最重要的一本Perl參考著作。其他重要的早期貢獻(xiàn)者還包括Tom Christiansen,也是古董級(jí)C與Unix專家。即使Perl程序員不是來(lái)自Unix系統(tǒng)管理員社區(qū),他們也被其中的人或者其中的人訓(xùn)練的人訓(xùn)練成那樣。大約在1993年我開(kāi)始閱讀關(guān)于Lisp 的書(shū),我有一個(gè)重要的發(fā)現(xiàn):Perl更像Lisp而不是C。如果你拿起一本優(yōu)秀的Lisp書(shū),其中會(huì)有一段文字描述Lisp的優(yōu)秀特點(diǎn)。例如,《Paradigms of Artificial Intelligence Programming》,作者Peter Norvig,有一節(jié)標(biāo)題是“是什么讓Lisp與眾不同”,其中就描述了Lisp的七個(gè)特點(diǎn)。Perl分享了其中六個(gè),C一個(gè)也沒(méi)有分享。這些是巨大的、重要的特點(diǎn),如頭等函數(shù)、符號(hào)表的動(dòng)態(tài)訪問(wèn)以及自動(dòng)存儲(chǔ)管理。Lisp程序員自1957年以來(lái)就在使用這些特點(diǎn)。他們知道如何高效使用這些語(yǔ)言特點(diǎn)的許多方法。如果Perl程序員能發(fā)現(xiàn)這些Lisp程序員已經(jīng)知道的事情,那么他們將學(xué)到許多使Perl編程工作更輕松的方法。說(shuō)比做容易。幾乎沒(méi)有人愿意聽(tīng)Lisp程序員的。Perl人對(duì)Lisp心存芥蒂,就像Larry Wall 的著名評(píng)論所表明的,Lisp與混合了剪下的指甲碎屑的燕麥看起來(lái)一樣。Lisp程序員經(jīng)常制造像“cons”與“cooder”的滑稽噪聲,他們還討論像PC loser-ing問(wèn)題的東西。他們相信Lisp比其他語(yǔ)言更好,他們也是這么說(shuō)的,這讓人不快。但是現(xiàn)在一切都好了,因?yàn)楝F(xiàn)在你不必聽(tīng)Lisp人的了。你可以聽(tīng)我的。我將制造一些輕緩的關(guān)于散列和存儲(chǔ)以及glob的噪聲,并討論流行的和令人鼓舞的軟引用與變量銷(xiāo)毀問(wèn)題。與其告訴你Lisp有多么好,不如告訴你Perl有多么好,到最后你將不會(huì)對(duì)Lisp有任何認(rèn)識(shí),但是對(duì)Perl知道得將會(huì)更多。然后你可以停止用Perl寫(xiě)C程序了。我認(rèn)為你將發(fā)現(xiàn)這是一個(gè)很好的改變。Perl就是Perl的樣子,比一個(gè)慢版本的C好得多。當(dāng)你寫(xiě)Perl程序而不是C程序時(shí),你將驚喜于所能夠做到的。致謝每段致謝都以這樣一句開(kāi)頭“要是沒(méi)有我的編輯Tim Cox不知疲倦的支持與協(xié)助,這本書(shū)肯定還沒(méi)寫(xiě)完”。除非你寫(xiě)一本書(shū),不然你將不會(huì)意識(shí)到這是多么真實(shí)的。在這里我無(wú)法用語(yǔ)言表達(dá),要是沒(méi)有Tim不知疲倦的支持與協(xié)助,這本書(shū)就不會(huì)寫(xiě)完,感謝他的貢獻(xiàn)、友善,還有他極大的耐心。這本書(shū)姍姍來(lái)遲,在我工作的時(shí)候Tim經(jīng)歷了三位助理。所有這些人都是樂(lè)于助人的和能干的,因此我謝謝Brenda Modliszewksi、Stacie Pierce以及Richard Camp?!澳芨傻摹甭?tīng)起來(lái)可能無(wú)力,但是我認(rèn)為這是最高的褒獎(jiǎng)。多謝產(chǎn)品經(jīng)理Troy Lilly與Simon Crump,不僅是能干的而且與他們合作愉快。臨近成書(shū)之前,我開(kāi)始為實(shí)例代碼寫(xiě)測(cè)試。我厭惡地認(rèn)識(shí)到幾乎沒(méi)有程序工作正常。有大量的小錯(cuò)誤(有些也不?。?,代碼與輸出之間的不兼容、排版等。謝謝Robert Spier在最后關(guān)頭的英勇,我認(rèn)為他捕獲了這些錯(cuò)誤里的大部分。Robert不僅確實(shí)是能干的、樂(lè)于助人的、富有成效的,而且確實(shí)是活潑開(kāi)朗的。如果本書(shū)中的任何代碼程序運(yùn)行如預(yù)期,那么要感謝Robert。(如果不是這樣,你應(yīng)該責(zé)備我,而不是Robert。)Robert也負(fù)責(zé)命名我用來(lái)準(zhǔn)備手稿的MOD文件準(zhǔn)備系統(tǒng)。我妻子Lorrie Kim的貢獻(xiàn)太多太大以至于無(wú)法一一描述。本書(shū)題獻(xiàn)給她。其他許多人對(duì)本書(shū)作出了貢獻(xiàn),但是他們中許多人在當(dāng)時(shí)并不知道。我幸運(yùn)地?fù)碛性S多卓越的老師,我有時(shí)不得不狠狠地考驗(yàn)他們的忍耐力。謝謝Mark Foster、Patrick X.Gallagher、Joan Livingston、Cal Lobel(第一位教我編程的老師)、Harry McLaughlin、David A.J.Meyer、Bruce Piper、Ronnie Rabassa、Michael Tempel以及Johan Tysk。正當(dāng)我認(rèn)為一切都錯(cuò)過(guò)了的時(shí)候,Mark Foster鬼使神差地為本書(shū)建議了書(shū)名。本書(shū)直接從兩本更早的書(shū)獲得靈感:《ML for the Working Programmer》,作者Lawrence Paulson,以及《Structure and Interpretation of Computer Programs》,作者Harold Abelson 和Gerald Jay Sussman。其他有重要影響的是《Introduction to Functional Programming》,作者Richard Bird 和Philip Wadler,以及《Paradigms of Artificial Intelligence Programming》,作者Peter Norvig。正式的技術(shù)閱校者的工作報(bào)酬比他們可能在別的項(xiàng)目中更低。這本書(shū)花了很長(zhǎng)時(shí)間寫(xiě)就,盡管我想與閱校者就每件小事進(jìn)行長(zhǎng)時(shí)間交談,但是我害怕如果那么做了,我將永遠(yuǎn)也不會(huì)完成。所以我很少與閱校者聯(lián)系,也許他們認(rèn)為我只是把他們的建議塞進(jìn)了碎紙機(jī)。但我不是那樣的,我極其認(rèn)真地仔細(xì)研究他們所有的批評(píng),并為這些批評(píng)中的大多數(shù)傷腦筋。我要謝謝閱校者:Sean Burke、Damian Conway、Kevin Lenzo、Peter Norvig、Dan Schmidt、Kragen Sitaker、Michael Scott以及Adam Turoff。在寫(xiě)作的時(shí)候,我維護(hù)了對(duì)本書(shū)感興趣的人的一個(gè)郵件列表,并把未定稿的章節(jié)發(fā)到郵件列表。這非常有幫助,我已經(jīng)把這種做法推薦給其他人。我的郵件列表的650個(gè)令人驚奇的成員無(wú)法一一列在這里。他們都是提供了幫助與支持的,本書(shū)由于他們的投入而更加完美。一些突出的人貢獻(xiàn)了大量的具體內(nèi)容:Roland Young、Damien Warman、David “Novalis” Turner、Iain “Spoon” Truskett、Steve Tolkin、Ben Tilly、Rob Svirskas、Roses Longin Odounga、Luc St-Louis、Jeff Mitchell、Steffen Müller、Abhijit Menon-Sen、Walt Mankowski、Wolfgang Laun、Paul Kulchenko、Daniel Koo、Andy Lester、David Landgren、Robin Houston、Torsten Hofmann、Douglas Hunter、Francesc Guasch、Kenneth Graves、Jeff Goff、Michael Fischer、Simon Cozens、David Combs、Stas Bekman、Greg Bacon、Darius Bacon,以及Peter Allen。我向許多提供幫助的貢獻(xiàn)者道歉,考慮到片幅問(wèn)題我沒(méi)有放在上面的列表里,更要向我意外遺漏的幾個(gè)特別有幫助的貢獻(xiàn)者道歉。Wolfgang Laun和Per Westerlund特別勤勉地幫助我糾正第二次印刷的錯(cuò)誤。在開(kāi)始寫(xiě)作以前,我收到了關(guān)于挑選出版社的有價(jià)值的建議,它們來(lái)自Philip Greenspun、Brian Kernighan和Adam Turoff。Damian Conway和Abigail對(duì)我的提議給予了有幫助的建議與批評(píng)。Sean Burke 錄下了我的象牙塔談話,刻成CD并發(fā)給我,還在最后一刻提供了有關(guān)RTF的咨詢。他定期發(fā)郵件提醒我,書(shū)到什么流程了,還經(jīng)常在我無(wú)法確定的時(shí)候到訪。第4章里幾個(gè)特殊的想法是由其他人建議的。Meng Wong 建議了聰明與恰當(dāng)?shù)摹袄锍瘫怼北扔鳌andal Schwartz 幫我“增補(bǔ)”函數(shù)。Eric Roode 建議了多列表迭代器。當(dāng)我需要讀Paul Graham絕版的書(shū)時(shí),A.E.Sundstrom借給了我。當(dāng)我需要《The Art of Computer Programming》第二卷的時(shí)候,Hildo Biersma與Morgan Stanley為我買(mǎi)來(lái)了。當(dāng)我需要錢(qián)的時(shí)候,B.B.King就借給我一些。謝謝他們所有人。第9章的約束系統(tǒng)繪制程序是一個(gè)大項(xiàng)目,我很長(zhǎng)時(shí)間盯著該項(xiàng)目。要是沒(méi)有Wm Leler 及時(shí)的幫助,我可能還盯著呢。Tom Christiansen、Jon Orwant以及Nat Torkington 在使我融入Perl社團(tuán)方面扮演了主要的與不可替代的角色。最后,“沒(méi)有這個(gè),這本書(shū)不可能寫(xiě)成”語(yǔ)句不能結(jié)束,要是不感謝Larry Wall 寫(xiě)了Perl并創(chuàng)立了Perl社團(tuán),沒(méi)有這個(gè),這本書(shū)不可能寫(xiě)成。

內(nèi)容概要

《高階Perl》是Perl全球社區(qū)公認(rèn)的經(jīng)典著作,是資深Perl技術(shù)專家(核心貢獻(xiàn)者之一)數(shù)十年工作經(jīng)驗(yàn)的結(jié)晶,Perl6設(shè)計(jì)者之一Conway親自作序推薦。《高階Perl》處處皆珍寶,不僅對(duì)Perl領(lǐng)域的各種經(jīng)典問(wèn)題給出了獨(dú)到且精辟的解釋,而且深入探討了Perl中各種 最新的主題,如遞歸、迭代器、過(guò)濾器、記憶術(shù)、劃分、數(shù)值方法、高階函數(shù)、currying、切斷排序、基于語(yǔ)法的解析、惰性求值和約束編程等內(nèi)容,并將這些轉(zhuǎn)換成現(xiàn)實(shí)編程工作中強(qiáng)有力的實(shí)用工具:文件系統(tǒng)互動(dòng)、HTML處理、數(shù)據(jù)庫(kù)訪問(wèn)、網(wǎng)頁(yè)抓取、排版、郵件處理、家庭理財(cái)、文本描圖和圖表生成等。全書(shū)包含大量真知灼見(jiàn)和最佳實(shí)踐。
http://hop.perl.plover.com/hopcn/

作者簡(jiǎn)介

作者:(美國(guó))Mark Jason Dominus 譯者:滕家海Mark Jason Dominus(陶敏修),資深Perl技術(shù)實(shí)踐者和研究者,對(duì)Perl技術(shù)有非常深刻的認(rèn)識(shí)和理解,擁有豐富的實(shí)踐經(jīng)驗(yàn)。他是Tie:File、Text:Template和Memoize模塊以及perlreftut手冊(cè)頁(yè)的作者,還是Perl核心貢獻(xiàn)者之一。2001年贏得Larry Wall實(shí)用性大獎(jiǎng)。熱衷于分享,撰寫(xiě)了大量關(guān)于Perl的技術(shù)文章并分享在自己的博客上,由于文章技術(shù)含量高,所以非常受歡迎,這使得他在Perl技術(shù)圈內(nèi)頗具知名度和影響力。他喜歡演講,經(jīng)常在大型公司和團(tuán)體的Perl研討會(huì)和培訓(xùn)課程上發(fā)表演講或提供培訓(xùn)服務(wù)。滕家海,Perl技術(shù)實(shí)踐者,精通Perl應(yīng)用開(kāi)發(fā),對(duì)Perl技術(shù)擁有獨(dú)到的認(rèn)識(shí)和理解,近十年來(lái)一直參與Perl的實(shí)踐開(kāi)發(fā),擁有豐富經(jīng)驗(yàn)。業(yè)余時(shí)間潛心于技術(shù)的鉆研,熱衷于分享Perl技術(shù),目前供職于一家IC設(shè)計(jì)公司,任CAD主管。

書(shū)籍目錄

本書(shū)贊譽(yù)譯者序前言第1章 遞歸與回調(diào)11.1 十進(jìn)制到二進(jìn)制的轉(zhuǎn)換11.2 階乘21.2.1 為什么私有變量是重要的31.3 漢諾塔41.4 層次化數(shù)據(jù)8遍歷的應(yīng)用和變化111.6 函數(shù)式編程與面向?qū)ο笫骄幊?71.7 HTML171.7.1 更靈活的選擇211.8 當(dāng)遞歸膨脹時(shí)221.8.1 Fibonacci數(shù)221.8.2 劃分24第2章 分配表272.1 配置文件處理272.1.1 表驅(qū)動(dòng)配置282.1.2 分配表的優(yōu)勢(shì)292.1.3 分配表策略322.1.4 默認(rèn)行為342.2 計(jì)算器352.2.1 再訪HTML處理38第3章 緩存與記憶術(shù)413.1 緩存修正遞歸423.2 內(nèi)聯(lián)緩存433.2.1 靜態(tài)變量443.3 好主意443.4 記憶術(shù)453.5 MEMOIZE模塊453.5.1 作用域和有效期473.5.2 詞法閉包493.5.3 再談?dòng)洃浶g(shù)523.6 CAVEATS523.6.1 返回值不依賴參數(shù)的函數(shù)523.6.2 有邊界效應(yīng)的函數(shù)533.6.3 返回引用的函數(shù)533.6.4 帶記憶的時(shí)鐘543.6.5 非??斓暮瘮?shù)543.7 鍵的生成553.7.1 用戶提供的鍵生成器的更多應(yīng)用583.7.2 內(nèi)聯(lián)的參數(shù)歸一化的緩存管理593.7.3 帶有引用參數(shù)的函數(shù)613.7.4 劃分613.7.5 為非純函數(shù)定制的鍵生成623.8 對(duì)象方法里的緩存623.8.1 對(duì)象方法的記憶術(shù)643.9 持續(xù)的緩存653.10 可供選擇的記憶術(shù)663.11 傳播福音713.12 速度的好處713.12.1 剖析和性能分析723.12.2 自動(dòng)剖析733.12.3 鉤子74第4章 迭代器754.1 簡(jiǎn)介754.1.1 文件句柄是迭代器754.1.2 迭代器是對(duì)象764.1.3 迭代器的其他普通實(shí)例774.2 自制迭代器784.2.1 一個(gè)平凡的迭代器:upto()784.2.2 dir_walk()804.2.3 聰明的靈感814.3 實(shí)例824.3.1 排列834.3.2 基因組序列生成器884.3.3 文件句柄迭代器914.3.4 一個(gè)純文本文件數(shù)據(jù)庫(kù)914.3.5 反向搜索數(shù)據(jù)庫(kù)974.3.6 隨機(jī)數(shù)生成1004.4 過(guò)濾和變換1034.4.1 imap()1034.4.2 igrep()1054.4.3 list_iterator()1064.4.4 append()1064.5 半謂詞問(wèn)題1074.5.1 避免問(wèn)題1084.5.2 可選的undef1094.5.3 重寫(xiě)功能函數(shù)1114.5.4 返回多個(gè)值的迭代器1124.5.5 明確的耗盡函數(shù)1124.5.6 四操作數(shù)迭代器1144.5.7 迭代器方法1164.6 可選的迭代器界面1164.6.1 用foreach循環(huán)多個(gè)數(shù)組1174.6.2 帶有類each界面的迭代器1204.6.3 系住變量界面1214.7 一個(gè)擴(kuò)展的例子:網(wǎng)頁(yè)抓取1244.7.1 僅追逐有趣的鏈接1264.7.2 參考URL1274.7.3 robots.txt1304.7.4 總結(jié)132第5章 從遞歸到迭代器1345.1 再訪劃分問(wèn)題1345.1.1 搜尋所有可能的劃分1365.1.2 優(yōu)化1385.1.3 變化1395.2 如何把一個(gè)遞歸函數(shù)轉(zhuǎn)換成一個(gè)迭代器1425.3 一個(gè)通用的搜索迭代器1495.4 其他通用的移除遞歸的技術(shù)1525.4.1 尾調(diào)用移除1525.4.2 產(chǎn)生尾調(diào)用1595.4.3 明確的棧161第6章 無(wú)限流1706.1 鏈表1706.2 惰性鏈表1716.2.1 一個(gè)平凡的流:upto()1726.2.2 流的功能函數(shù)1736.3 遞歸流1756.3.1 使流帶記憶1766.4 HAMMING 問(wèn)題1796.5 正則字符串生成1816.5.1 按次序生成字符串1896.5.2 正則匹配1916.5.3 切斷排序1926.6 NEWTON-RAPHSON方法2006.6.1 近似流2036.6.2 導(dǎo)數(shù)2036.6.3 烏龜和兔子2056.6.4 金融2076.7 冪級(jí)數(shù)2096.7.1 導(dǎo)數(shù)2136.7.2 其他函數(shù)2136.7.3 符號(hào)計(jì)算213第7章 高階函數(shù)與currying2177.1 currying2177.2 普通的高階函數(shù)2227.2.1 自動(dòng)的currying2237.2.2 原型2257.2.3 更多的currying2277.2.4 還是更多的currying2287.3 reduce()和combine()2297.3.1 布爾操作符2327.4 數(shù)據(jù)庫(kù)2347.4.1 操作符重載238第8章 解析2398.1 詞法分析器2398.1.1 評(píng)估《》操作符2408.1.2 更通用的詞法分析器2438.1.3 鏈?zhǔn)皆~法分析器2458.1.4 偷看2498.2 一般的解析2508.2.1 語(yǔ)法2508.2.2 解析語(yǔ)法2548.3 遞歸下降解析器2568.3.1 非常簡(jiǎn)單的解析器2578.3.2 解析器操作符2588.3.3 合成的操作符2598.4 算術(shù)表達(dá)式2618.4.1 一個(gè)計(jì)算器2678.4.2 左遞歸2678.4.3 star()的一個(gè)變體2728.4.4 通用操作符解析器2758.4.5 除錯(cuò)2778.4.6 完成的計(jì)算器2838.4.7 錯(cuò)誤診斷和矯正2858.4.8 大數(shù)2908.5 解析正則2908.6 大綱2948.7 數(shù)據(jù)庫(kù)查詢解析2998.7.1 詞法分析器2998.7.2 解析器3018.8 回溯解析器3048.8.1 續(xù)篇3058.8.2 解析流3088.9 重載310第9章 聲明式編程3159.1 約束系統(tǒng)3159.2 本地傳播網(wǎng)絡(luò)3159.2.1 實(shí)現(xiàn)一個(gè)本地傳播網(wǎng)絡(luò)3179.2.2 本地傳播的問(wèn)題3259.3 線性方程3269.4 linogram:一個(gè)繪圖系統(tǒng)3279.4.1 方程3349.4.2 值3439.4.3 特征類型3549.4.4 解析器3609.4.5 缺失的特征3739.5 總結(jié)375

編輯推薦

《高階Perl》編輯推薦:Perl全球社區(qū)公認(rèn)經(jīng)典著作,資深Perl專家(核心貢獻(xiàn)者之一)數(shù)十年工作經(jīng)驗(yàn)結(jié)晶,Perl6設(shè)計(jì)者之一Conway親自作序推薦!深入探討Perl領(lǐng)域的各種經(jīng)典問(wèn)題和新主題,包含大量最佳實(shí)踐和真知灼見(jiàn),Perl程序員進(jìn)階必讀。

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    高階Perl PDF格式下載


用戶評(píng)論 (總計(jì)5條)

 
 

  •   本以為它會(huì)講解遞歸到迭代的自動(dòng)轉(zhuǎn)換呢,結(jié)果一看,原來(lái)只不過(guò)是手工轉(zhuǎn)換的!有幾處技術(shù)上的難點(diǎn),但總的來(lái)說(shuō),技術(shù)含量不高,講解的是2005年的Perl 5,有些過(guò)時(shí)了相對(duì)來(lái)說(shuō),書(shū)的價(jià)錢(qián)就有些不值了!
  •   雖然中文版的質(zhì)量并不理想,但這依然是一本好書(shū)。部分章節(jié)可以看作是Perl版的SICP。
  •   剛到手,看了前幾頁(yè),忍不住來(lái)這里說(shuō)一下。第一章,第一頁(yè): sub binary { binary my ($n) = @_ #這里多了一個(gè)binary吧?第三頁(yè) 為什么私有變量是重要的雖然去掉 $n 是全局變量,但是每次調(diào)用函數(shù)的時(shí)候會(huì)正確的初始化,所以我并不認(rèn)為和書(shū)中說(shuō)的一樣。我認(rèn)為可以得到正確的結(jié)果。只是多了一個(gè)全局變量$n.
  •   不得不說(shuō),讀起來(lái)比英文版輕松點(diǎn)。代碼比一般的Perl的書(shū)難。
  •   這本開(kāi)頭就講算法,,第一章看了好幾天才明白,,,
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7