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

2021-02-25 生信技能樹

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

1 入門資料2 知識要點

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

     $ 表示單個變量 
    用單雙引號區別,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,一個匹配,一個替換,比較有趣的就是

內建變量 
就是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 !

相關焦點

  • perl語言十分鐘入門【零基礎可入】
    零基礎,perl語言,10分鐘入門
  • 菜鳥學Python入門教程大盤點|7個多月的心血總結
    1.為什麼要學Python這個問題是很多從來沒有學過或者沒有怎麼了解過Python的小白最常見的問題,Python語言非常簡單,同時又很強大,最新的數據是位列2016語言排行榜第三位,而且美國,澳大利亞,加拿大,14
  • Perl語言模板及配置
    對於生信Perl使用人員有個交流和互相提高的平臺,讓新人少走點彎路。對於沒有任何Perl基礎強例建議別入坑,想學生信找Python教程吧,不解釋看下圖。TIOBE世界程式語言使用排行我們可以看到世界前三是Java, C, C++,大家都聽說過;第四是Python,目前在生領領域有取代Perl地位的趨勢,目前Perl列第9(世界十大語言之一)下降一位。
  • Perl教程 - 正則表達式
    Perl的正則表達式中如果出現(),則發生匹配或替換後()內的模式被Perl解釋器自動依次賦給系統$1,$2.$string=~s/(love)/<$1>/; #此時$1="love",並且該替換的結果是將$string變為"I<love>perl" $string=~s/(i)(.*)(perl)/<$3>$2<$1>/;#這裡$1="i",$2="love",$3="perl",並且替換後$string變為"<perl>love<i>
  • Perl 6 真的太煩人了?
    主要應用於 Unix 系統維護功能、CGI 腳本、Web站點維護自動化等場景的 Perl,是一種功能非常豐富的電腦程式語言。它像 C 一樣強大,像 awk、sed 等腳本描述語言一樣方便。不過,還記得曾於 2015 年發布的 Perl 6,是歷經 15 年時間開發的最終成果,為何會這麼長?
  • 【Perl語言進階筆記(一)】Getopt::Long模塊 + Perl單行命令
    -h可以查看perl的所有參數使用說明,使用perl單行需要使用到-e參數$ perl -e 'print "hello world!\n"'perl單行常用的場景為進行文本的逐行讀取並操作,即隱式地開啟while(<>),需要使用-n參數perl -ne    'BEGIN{}    ...
  • PostgreSQL連接Perl
    連接到資料庫下面的Perl代碼顯示了如何連接到一個現有的資料庫。如果資料庫不存在,那麼它就會被創建,終於將返回一個資料庫對象。它會顯示以下消息: Opened database successfully Table created successfully  INSERT 操作Perl程序,顯示我們如何在上面的例子中創建
  • bbox教學菜鳥入門【視頻+文字】
    bbox教學菜鳥入門視頻教程bbox教學菜鳥入門文字教程戴金戒指,戴戴戴口罩戴金戒指。
  • 黑客基礎菜鳥快速入門全套課程
    加微信 i77169,回復,"黑客基礎菜鳥快速入門全套課程"       注意大小寫,注意要寫全,就會給你回復下載地址而他們的基本前提是「利用漏洞」,黑客利用漏洞可以做下面的事情:  1、獲得系統信息:有些漏洞可以洩漏系統信息,暴露敏感資料,從而進一步入侵系統;  2、入侵系統:通過漏洞進入系統內部,或取得伺服器上的內部資料、或完全掌管伺服器;  3、尋找下一個目標:一個勝利意味著下一個目標的出現,黑客應該充分利用自己已經掌管的伺服器作為工具,尋找併入侵下一個系統;
  • 實例解析Perl substr函數應用
    實例解析Perl substr函數應用 本文向大家簡單介紹一下Perl substr函數應用,在編寫perl程序的時候,我們有時需要截取一個字符串中的部分內容,Perl substr函數就可以實現此功能。
  • 新人直播菜鳥入門 新人直播公告怎麼寫
    18183首頁 新人直播菜鳥入門 新人直播公告怎麼寫 新人直播菜鳥入門 新人直播公告怎麼寫 來源:18183
  • 【菜鳥養成】日語初學者的救星!
  • python如何快速入門
    昨天有同學私信我,說看了機器學習的東西,但是不懂python,也不知道怎麼入門,打算介紹一下思路給同學參考一下。首先,要連接python是什麼?可以做什麼?目前有什麼場景?機器學習實戰-sklearn介紹接下來,我根據我的經驗,來給出建議,可以參考一下如何入門
  • 菜鳥如何提升Python編程水平,老碼農良心推薦
    菜鳥學Python粉絲的第23篇投稿閱讀本文大概需要5分鐘菜鳥學編程想要提升水平,光看不練假把式。
  • 學習網頁製作並不難,HTML菜鳥教程,從這裡開始第一課學習
    很多朋友想學一下網頁製作,上網一看,只要涉及到網頁製作,都離不開HTML這個詞語,HTML是HyperText Markup Language的簡稱,想學習HTML語言,先得了解一些基本知識,今天這邊內容可以作為學習HTML的菜鳥教程第一課。
  • 這幾本生信入門書籍你不能不知,附下載連結
    基因組學相關的書籍:                                                                   基因組學概論這本書比較全面系統的介紹了  DNA、蛋白質序列和結構、基因組、蛋白質組、轉錄組和系統生物學內容,也分別對原核生物
  • Perl if語句用法實例解析
    /usr/bin/perl  $x=7;  $y=7;  /usr/bin/perl  $x=5;  #PLAYTHEGUESSINGGAME  if($x=
  • 專業書單:如何系統入門經濟學?
    而非經管專業以外,多少也一些同學也會基於投資等理由對經濟學感興趣,想要自己入門。說經濟學的整個思考框架會對人們做決策的理念產生影響,是絲毫不過分的。這裡就由淺入深的和大家聊聊,哪些書是系統入門經濟學的參考選項。
  • 零基礎菜鳥如何快速上手Python
    那麼作為零基礎菜鳥的你,如何在Python入門的時候能避開大多數的雷區,這篇文章值得你花10分鐘的時候仔細閱讀。零基礎菜鳥如何快速上手Python為了幫助大家更輕鬆的學好Python,無私分享一套Python學習資料,希望對正在學習的你有所幫助!
  • 菜鳥驛站是如何實現倉庫自動化?
    菜鳥驛站是如何實現倉庫自動化? 菜鳥驛站在不斷發展的過程中,其實倉儲自動化建設速度也是比較快的,利用這種自動化的模式,極大的減少了人工成本的投入,是通過自動存取倉庫的模式,為眾多服務機構提供有效的存儲。