「生信學習周」教你如何系統入門Perl

文章推薦指數: 80 %
投票人數:10人

Perl是典型的腳本語言,短小精悍,非常容易上手,尤其適合處理文本,數據,以及系統管理。

它在老一輩的生物信息學分析人員中非常流行,出於歷史遺留原因大家肯定會或多或少地接觸 Perl,即使你再怎麼推崇Python或者GO等新興程式語言。

1 入門資料

  • 兩個半小時入門指導:https://qntm.org/files/perl/perl.html

  • 21天學完 perl,自己搜索下載PDF書籍吧!

  • 大小駱駝書,建議都看完,以囫圇吞棗的方式閱讀

  • 官網:https://www.perl.org/

  • 函數如何用:都可以在http://perldoc.perl.org/perl.html

  • 論壇:http://www.perlmonks.org/

2 知識要點

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

  • 理解perl裡面的三種變量

$ 表示單個變量

用單雙引號區別,q,qq

@ 表示多個變量組成的數組,qw

% 表示關係型變量-hash

變量不嚴格區分類型,沒有int/float/double/char這樣的概念

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

簡單變量的操作函數

  1. Numerical operators: <, >, <=, >=, ==, !=, <=>, +, *

  2. 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,一個匹配,一個替換,比較有趣的就是

  • 內建變量

    就是perl語言設計的時候定義了一大堆的全局變量($_ $, $0 $> $< $! $. @ARGV @F @_ @INC %ENV %SIG



    外表上看起來都是一個$ @ %符號後面加上一大堆的奇奇怪怪的字符,表示一些特殊變量,這也是perl語言飽受詬病的原因。

    但是有些非常重要,懂了它之後寫程序會方便。

    下載一個表格,裡面有近100個預定義變量需要學習的。

  • 控制語句(循環/條件/判斷)

    if ... elsif ... else ...

  • 讀寫文件,腳本實戰!

  1. while(<>){

  2. #do something !

  3. }

這是我最喜歡的一個程序模板,讀取文件,根據需要處理文件,然後輸出。

需要實現非常多的功能,然後就可以自己總結腳本技巧,也能完全掌握perl的各種語法。

在生物信息學領域,需要實現的功能有!

  • perl 單行命令

    我個人特別喜歡這個知識點,我也專門下載過一本書來學習,把這個教程看完就基本上能全明白:http://www.catonmat.net/blog/perl-one-liners-explained-part-one/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

  • 系統操作相關 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 複習資料

如果你感覺學的差不多了,就可以下載一些複習資料,查漏補缺:

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

生信周安排內容預告如下,請小夥伴們安排好時間,也請發揚freescience精神,轉需,3Q.

周一

漫談如何跨越擺在生信入門路上的三大障礙

周二

生信分析人員如何系統入門R?

周三

晚9點,十八期沙龍主題:生信編程很簡單!

加入推文底部沙龍群即可參加(需實名)

周四

生信分析人員如何系統入門perl?

周五

生信分析人員如何系統入門LINUX?

周六

如何通過Google來使用ggplot2可視化

想學生信編程的童靴進下面這個群吧,總有好果子吃的:

生信菜鳥專欄

生信菜鳥專欄是生信技能樹論壇的版主團隊的專欄,團隊成員生信技能背景豐富,文件格式,數據資源,軟體使用,腳本技巧,統計繪圖,組學實戰均有對應人才。

而本專欄將從基礎到深入,為零基礎的各位剖析生信技能。

科學自由共享

投稿請扔至:[email protected]

長按二維碼關注


請為這篇文章評分?


相關文章 

C語言之路

學習C語言的路程就像無終點的馬拉松一樣,終點站在什麼地方誰都不知道只有一直跑下去,其實我們要做的並不是真的跑完而是要享受這跑的過程。而C語言的數據類型就是學習之路的開始之一。(571545210...