1. 程式人生 > 其它 >【生信菜鳥經】如何系統入門Perl

【生信菜鳥經】如何系統入門Perl

Perl是典型的指令碼語言,短小精悍,非常容易上手,尤其適合處理文字,資料,以及系統管理。它在老一輩的生物資訊學分析人員中非常流行,出於歷史遺留原因大家肯定會或多或少地接觸 Perl,即使你再怎麼推崇Python或者GO等新興程式語言。

1 入門資料

2 知識要點

在看書的同時,你必須記住和熟練使用的知識點是下面這些:

  • 理解perl裡面的三種變數表示方式

$ 表示單個變數 用單雙引號區別,q(),qq() @ 表示多個變數組成的陣列,qw() % 表示關係型變數-hash 變數不嚴格區分型別,沒有int/float/double/char這樣的概念

三種變數都有對應的操作技巧:

簡單變數的操作函式

Numerical operators:  <,  >, <=, >=, ==, !=, <=>, +, *
String operators:    lt, gt, le, ge, eq, ne, cmp, ., x

陣列操作(pop/push/shift/unshift/splice/map/grep/join/split/sort/reverse) hash操作方式

(keys,values,each,delete,exists)

具體需要在實戰裡面體會:http://www.biotrainee.com/forum-90-1.html 生信人必練的200個數據處理任務(歡迎大家去練習)

變數內容交換,字元型轉為數值型,字串轉為字元陣列,字串變數,heredoc,字串分割,字串擷取,隨機數生成,取整,各種概率分佈數,多維矩陣如何操作,進位制轉換,hash翻轉,陣列轉hash

  • 上下文環境 這個比較複雜: http://www.perlmonks.org/?node_id=738558
    ,就是需要理解你寫的程式是如何判斷你的變數的,你以為的不一定是你以為的。
  • 正則表示式 這也是一個非常重要的一塊內容,基礎用法就是m和s,一個匹配,一個替換,比較有趣的就是1,2等等捕獲變數。
  • 內建變數 就是perl語言設計的時候定義了一大堆的全域性變數($_ $, $0 $> $< $! $. @ARGV @F @_ @INC %ENV %SIG) 。外表上看起來都是一個$ @ %符號後面加上一大堆的奇奇怪怪的字元,表示一些特殊變數,這也是perl語言飽受詬病的原因。但是有些非常重要,懂了它之後寫程式會方便。下載一個表格,裡面有近100個預定義變數需要學習的。
  • 控制語句(迴圈/條件/判斷) if ... elsif ... else ... unless/while/next/last/for/foreach
  • 讀寫檔案,指令碼實戰!
while(<>){
#do something !
}

這是我最喜歡的一個程式模板,讀取檔案,根據需要處理檔案,然後輸出。需要實現非常多的功能,然後就可以自己總結指令碼技巧,也能完全掌握perl的各種語法。在生物資訊學領域,需要實現的功能有!

  • perl 單行命令 我個人特別喜歡這個知識點,我也專門下載過一本書來學習,把這個教程看完就基本上能全明白:http://www.catonmat.net/blog/perl-one-liners-explained-part-one/。學習單行命令的前提是掌握非常多的奇奇怪怪的perl自定義變數和perl的基礎語法,用熟練了之後就非常方便,很多生物資訊學資料處理過程我現在基本不寫指令碼,都是直接寫一行命令,完全代替了shell腳本里面的awk、sed/grep系列命令。(perl -p -a -n -a -l -i -F -M)
  • 預定義函式 perl 是一個非常精簡的語言,自定義的函式非常少,連min max這樣常見的函式都沒有,如果你需要使用這樣的功能,要麼自己寫一個函式,要麼使用加強版的包,perl的包非常多。 下面列出一些,我常用的函式: 程式必備: use/die/warn/print/open/close/<>/ 數學函式:sin/cos/log/abs/rand/srand/sqrt 字串函式 :uc/lc/scaler/index/rindex/length/pos/substr/sprintf/chop/chomp/hex/int/oct/ord/chr/unpack/unencode defined/undef
  • 系統操作相關 perl語言是跨平臺的,因為它的執行靠的是perl直譯器,而perl的直譯器可以安裝在任何機器上面。所以可以用perl來代替很多系統管理工作。 系統命令呼叫 檔案控制代碼操作(STDIN,STDOUT,STDERR,ARGV,DATA,) 系統檔案管理(mkdir/chdir/opendir/closedir/readdir/telldir/rmdir/)
  • 一些高階技巧 自定義函式 sub , 引數傳遞,陣列傳遞,返回值 模組操作(模組安裝,載入,模組路徑,模組函式引用) 引用(變數的變數) 選擇一個好的編輯器-編譯器,editplus,notepad++,jEdit,程式設計習慣的養成。 搞清楚perl版本的問題,還有程式編碼的問題,中文顯示的問題。 程式除錯
  • perl常見模組學習 perl和LWP/HTML做網路爬蟲必備,重點是DOM如何解析; perl和CGI程式設計,做網站的神器,重點是html基礎知識; DBI相關資料庫,用perl來操作mysql等,當然,重點是mysql知識; GD and GD::Graph 可以用來畫圖,但是基本上沒有人用了,除了CIRCOS畫圈圈圖火起來了; TK模組,可以編寫GUI介面程式,但是也幾乎沒有人用了; XML/pdf/excel/Json 相關的模組可以用來讀取非文字格式資料,或者輸出格式化報告; socket通訊相關,高手甚至可以寫出一個QQ的模仿版本; 最後不得不提的就是Bioperl了,雖然我從來沒有用過,但是它的確對初學者非常有用,大多數人不提倡重複造輪子,但我個人覺得,對初學者來說,重複造輪子是一個非常好的學習方式。大家可以仿造bioperl裡面的各個功能,用自己的指令碼來實現!

3 複習資料

如果你感覺學的差不多了,就可以下載一些複習資料,查漏補缺: http://michaelgoerz.net/refcards/perl_refcard.pdf https://rc.hms.harvard.edu/training/perl/Perl%20Cheat%20Sheet.pdf https://www.cheatography.com/mishin/cheat-sheets/perl-reference-card/ http://www.catonmat.net/download/perl.predefined.variables.pdf http://www.erudil.com/preqr.pdf https://www.cs.tut.fi/~jkorpela/perl/regexp.html https://support.sas.com/rnd/base/datastep/perl_regexp/regexp-tip-sheet.pdf

做一個調查吧,做生物資訊資料處理的你~

最後,致敬創造了perl這個程式語言的Larry Wall !