一文了解Perl語言

2021-09-29 03:43:58 字數 3253 閱讀 8977

perl,一種功能豐富的計算機程式語言,執行在超過100種計算機平台上,適用廣泛,從大型機到便攜裝置,從快速原型建立到大規模可擴充套件開發。 [1]

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,是指程式執行的直譯器。

從這段描述中,我們就知道了perl最重要的就是它的文字處理能力, 而早期生物資訊學的本質就是序列分析,所以「確認過眼神,我遇見對的人」,perl成了生物資訊必學語言。

我後續在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被設計為了解決最近鄰搜尋問題 ...