perl,一種功能豐富的計算機程式語言,執行在超過100種計算機平台上,適用廣泛,從大型機到便攜裝置,從快速原型建立到大規模可擴充套件開發。 [1]從這段描述中,我們就知道了perl最重要的就是它的文字處理能力, 而早期生物資訊學的本質就是序列分析,所以「確認過眼神,我遇見對的人」,perl成了生物資訊必學語言。perl最初的設計者為拉里·沃爾(larry wall),於2023年12月18日發表。現在的版本為perl 6,於2023年12月25日更新。
perl借取了c、sed、awk、shell 指令碼語言以及很多其他程式語言的特性,其中最重要的特性是它內部整合了正規表示式的功能,以及巨大的第三方**庫cpan。簡而言之,perl像c一樣強大,像awk、sed等指令碼描述語言一樣方便,被perl語言愛好者稱之為「一種擁有各種語言功能的夢幻指令碼語言」、「unix 中的王牌工具」。
perl 一般被稱為「實用報表提取語言」(practical extraction and report language),你也可能看到「perl」,所有的字母都是小寫的。一般,「perl」,有大寫的 p,是指語言本身,而「perl」,小寫的 p,是指程式執行的直譯器。
我後續在macos上學習perl, 版本是5.18.2,這版本有點老舊,但是不妨礙學習。
大部分的教程都是讓大家寫乙個perl指令碼,比如說hello.pl,**如下
#!/usr/bin/env perl
print "hello world \n"
然後用perl hello.perl
執行。當然最快的方法還是用perl的一行命令, 如下所示。
perl -e 'print "hello world"'
據說perl高手能把perl一行命令用的出神入化
你可以用20多門語言說「我愛你」,但是不代表你會20門語言,所以會用perl寫"hello world"其實只是開始而已。了解一門程式語言,最少要掌握如下內容:
perl支援的資料型別其實和大多數程式語言差不多,都有數值型(整數和浮點數)、字串
資料結構分為:標量、陣列、雜湊。 這些資料結構都會和變數聯絡在一起,才能根據變數調取資料。perl和python一大不同就在於,python認為括號",'
以外的字串都是變數名,而perl的變數名之前必須要有專門的符號指明,這和shell類似。
perl -e '$id = abc; print "hello $id"' ; # 標量定義和呼叫
perl -e '@number = (1,2,3,4); print "@number\n"'# 陣列定義和呼叫
perl -e '@number = (1,2,3,4); print "$number[1]\n"'# 陣列定義和呼叫
perl -e '$age=25;$age=10; print "$age\n"' # 雜湊定義和呼叫
perl -e '%hash = (a=>b,c=>d,e=>f); print "$hash\n"' # 雜湊定義和呼叫
所以以後在perl指令碼看到一堆的符號時不要慌,看到$
是標量,看到@
是陣列, 看到%
就是雜湊。
雜湊對應python的字典(dict), 對應r的列表(list)據說所有邏輯都可以用條件語句和迴圈語句來編寫,所以每一門程式語言都一定要有。
條件語句的寫法
perl -e '$x=0; if($x>0)elsif($x<0)else print "$y\n";'
迴圈語句有三種寫法,for ,foreach, while
for ($x=5;$x<10;$x++)
foreach $x(1..5)
while 比較適用於檔案讀取和輸出,
讓我們先建立乙個檔案cat /etc/passwd > passwd.txt
, 然後輸出到另乙個檔案中
#/usr/bin/env perl
my $file_in = "passwd.txt";
my $file_out = "passwd_out.txt";
open in, "
open out, ">", $file_out;
while ()
close in;
close out;
這裡出現幾個陌生的東西,乙個是my
表示宣告變數,取決於具體位置來確定定義的變數是區域性變數還是全域性變數。<>
表示讀取檔案 , open是乙個函式,用於建立乙個檔案控制代碼從而進行檔案讀寫, close就是關閉檔案讀寫。
這裡有乙個詭異的符號是的$_
, 它表示是讀取的當前行
在perl裡是找不到物件的,因為它不是物件導向程式設計的語言,它只有函式。
# 宣告函式
sub sum
# 呼叫函式
$sum_number = &sum(2,8);
print "$sum_number \n"
這裡又出現了乙個詭異的字元@_
,表示是函式傳參時放置引數的陣列,可以從中取實參。 呼叫函式的時候需要在函式名前用&
宣告。
當然,大部分情況下,我們是不怎麼寫函式,我們都是面向呼叫函式程式設計,所以知道perl裡有哪些好用的函式很重要
關於函式的用法,在進行搜尋,一般要了解一門程式語言一定要查不知道多少遍的幫助文件。
其實正規表示式才是perl的重點,學perl不用perl的正規表示式等於是沒有學過perl,但是這部分內容其實是非常多的,這裡舉出乙個例子,
$seq = "accggatcattgtcaa";
if ($seq =~ m/ac/)
看到的=~
就意味著後面將會出現正規表示式。=~
不是簡單的賦值符號=
,也不是==
用於邏輯判斷,而是將變數的值進行對應的正則運算 一文了解Perl語言
perl,一種功能豐富的計算機程式語言,執行在超過100種計算機平台上,適用廣泛,從大型機到便攜裝置,從快速原型建立到大規模可擴充套件開發。1 perl最初的設計者為拉里 沃爾 larry wall 於1987年12月18日發表。現在的版本為perl 6,於2015年12月25日更新。perl借取了...
一文了解Flink State Backends
當我們使用flink進行流式計算時,通常會產生各種形式的中間結果,我們稱之為state。有狀態產生,就必然涉及到狀態的儲存,那麼flink中定義了哪些形式的狀態儲存呢,下面一一給大家介紹一下。顧名思義,memorystatebackend狀態後端是將狀態資料以object的形式存放於j a heap...
一文了解M Tree(M樹)
這篇部落格分析了 indexing metric spaces with m tree 後文簡稱m tree或m樹 我將從以下幾個方面介紹它 背景m tree的結構 m tree的插入 m tree的 如何使用m tree進行range搜尋 m tree的 m tree被設計為了解決最近鄰搜尋問題 ...