SlideShare a Scribd company logo
Perl Tutorial For
Bioinformatics
Speaker: Ping-lun Liao
pinglunliao@gmail.com
What is Perl?

Perl is an acronym that stands for Practical
Extraction and Reporting Language.

History
− Written by Larry Wall.
− The three chief virtues of a Perl programmer:

Laziness

Impatience

Hubris
Purpose of Perl

World Wide Web Programming (CGI)

Internet Server Application Programming
Interface extension

ActiveX script language

System Administration chores

Object Linking Embedded Automation

Network Programming

Graphics User Interface
Perl's Benefits

Ease of Programming

Rapid Prototyping

Portability

Speed

Program Maintenance
Software

Interpreter
− Windows

ActivePerl

StrawberryPerl
− Linux

ActivePerl

perl
− Mac OS X

ActivePerl
− Perl Download

IDE
− Padre
− Eclipse + EPIC
− Perl Express
− Open Perl IDE
Hello Perl

#!/usr/bin/perl

# This line is comment

print "Hello Perl";
Save this file as hello.pl
Type “perl hello.pl” from the MS command line
Hello Perl
perl cmd

perl –h: print summary of options

"perl –c: test01.pl": check syntax without
running program

perl –v: version and patch-level of perl

"perl –W test01.pl": prints warnings about
possible bad constructs
perl cmd
User Input

print "Who are you?n";

$name = <STDIN>;

chomp $name;

print "Hello, $name!n";

name.pl
Data Type

純量 (scalars)
− $variableName

陣列 (array)
− @variableName

雜湊 (hash)
− %variableName
Scalars
純量是 Perl 能夠操作的資料型態中最簡單的一
種。
Perl 的純量由數值及字串組成。對其它程式語言來
說,數值和字串的處理方式是不同的,但對 Perl
來說,則沒有太大的不同。
數值
數值計算
運算子

-> 方法呼叫、解參考

++ 遞增, -- 遞減

** 乘冪 ( 次方 )

! 非, ~ 位元運算的 非,  參考

=~ 比對相符, !~ 比對不符

* 乘, / 除, % 求餘數, x 字串倍數

+ 加、 - 減, . 字串連接

<< 位元左移, >> 位元右移
運算子

< 小於

> 大於

<= 小於或等於

>= 大於或等於

lt 字串小於

gt 字串大於

le 字串小於或等於

ge 字串大於或等於

== 等於

!= 不等於

<=> 數值比較

eq 字串等於

ne 字串不等於

cmp 字串比較
運算子

& 位元 AND

| 位元 OR

^ 位元 XOR

&& AND( 且 )

|| OR ( 或 )

.. 範圍

? : 三元運算子,例:
($a > $b) ? $a : $b;

= 指定, += 、 -
= , *= 等等

, 逗號運算子, => 箭
號運算子

not 邏輯的 NOT

and 邏輯的 AND

or 邏輯的 OR

xor 邏輯的 XOR
字串

字串由任何字元所組成, Perl 的字串須以單引
號或雙引號括起來 (stringDemo.pl)
跳脫字元 (escapes)
引號的區別

跳脫符號在雙引號中才有效,在單引號中無效。

雙引號中可以做變數代換,單引號則不行。
字串的運算

stringDemo.pl
純量變數

純量變數是向記憶體要求配置一個空間,用來存
放數值或字串之用。

大部份高階語言皆要求使用變數之前要先宣告,
但 Perl 不必,隨時隨處均可立即產生,不必預
先宣告。

Perl 的純量變數表示法很簡單: $ 加上變數名
稱。變數名稱的第一個字必須為英文字元或底線
_ 。
純量變數
顯示純量變數內容

scalarDemo.pl
數值和字串也可運算

scalarWithStrDemo.pl
比較算符
真假值

0 為假,其它數值皆為真。

'0' 、 "0" 及空字串 '' 、 "" 為假,其它字串皆為
真。

運算結果可以轉換成 "0" 者為假。

undef 這個特別值為假。

任何未定義的值為假。

上述假值定義之外,其餘為真。
真假值例子
亂數

randomDemo.pl
Data Type
陣列

談 Perl 的陣列之前,應先來了解何謂串列 (list)

串列
− 串列是小括號 () 內,由一串純量組成 (0 個元素以
上 ) ,彼此以逗點分開。
串列
串列

像 ("Mmm", "NNN", "Jjj", "Kkk", "Xxx") 這種串
列要鍵入那麼多雙引號,挺累人的,您也可以用
qw 算符來簡化它 ( 別忘了 Perl 是懶惰程式設
計師的最愛 ) :
串列

除此之外,您也不一定要用小括號,您可用任何
符號做為起始及結束符號:
串列

串列可用來快速交換變數內容,不需要中間暫存
變數:
產生陣列

Perl 的陣列,以 @ 加上變數名稱來表示,比如:
− @oklist ,它的元素可由 index 索引逐一取得,第一個 index 值由 0 開始,最
後一個 index 值由 $#oklist 來表示。陣列的第一個元素為 $oklist[0] ,第二個元
素為 $oklist[1] ,第三個元素為 $oklist[2] ,其它依此類推,最後一個元素為
$oklist[$#oklist]
@oklist=(1, 2, 4, 6);
@oklist 陣列共有 4 個元素,分別是 $oklist[0], $oklist[1],
$oklist[2], $oklist[3]
$#oklist 值為 3
最後一個元素可表示成 $oklist[$#oklist] ,其值為 6
@tiny=(); # 空陣列
產生陣列產生陣列

arrayDemo1.pl
產生陣列

arrayDemo2.pl
產生陣列

arrayDemo3.pl
走返陣列元素

for loop: arrayDemo4.pl
走返陣列元素

foreach: arrayDemo5.pl
陣列的操作

陣列主要有四個操作
− pop :由陣列尾端,取出最後一個元素
− push :由陣列尾端,置入一個元素,形成最後的元
素
− shift :由陣列頭部,取出第一個元素
− unshift :由陣列頭部,置入一個元素,變成第一個
元素
陣列的操作

pop:arrayDemo6.pl
陣列的操作

push:arrayDemo7.pl
陣列的操作

push:arrayDemo8.pl
陣列的操作

shift:arrayDemo9.pl
陣列的操作

unshift:arrayDemo10.pl
陣列的操作

unshift:arrayDemo11.pl
拷貝陣列

arrayDemo12.pl
陣列逆轉

arrayDemo13.pl
陣列排序

按照 ASCII 排序 :arrayDemo14.pl
陣列排序

arrayDemo15.pl
陣列排序

按照數值排序 :arrayDemo16.pl
陣列排序

按照數值排序 :arrayDemo17.pl
雜湊

雜湊很類似於陣列,但陣列是以數字做索引,雜
湊則以字串做索引,這是最大的不同。雜湊的索
引,我們稱為鍵 (key) ,其對應的內容,我們稱
為值 (value) ,雜湊就是由一對對的 " 鍵 / 值 "
組合而成。換言之,雜湊是把某一套資料對應到
另一套資料。
雜湊

欲存取雜湊的值,只要使用 $ 雜湊名 { 鍵 } 即
可。
雜湊

以下是另一種定義雜湊的方式,結果同上頁
− %all=("t111222333", " 王大空 ", "s444555666", " 李
小二 ", "k333111555", " 陳大一 ");

動態產生雜湊 :HashDemo1.pl
雜湊
雜湊

reverse 可以將一個雜湊的鍵 / 值互調成為值 /
鍵
雜湊的處理

以下幾種函式經常用來處理雜湊:
− keys 取出雜湊的鍵,傳回一個陣列
− values 取出雜湊的值,傳回一個陣列
− each 取出雜湊的鍵 / 值對,傳回一個串列
− exists 用來判斷某一雜湊中是否存在該鍵
− delete 用來移除雜湊中某一對鍵和值
keys

取出雜湊的鍵,傳回一個陣列 :HashDemo2.pl
keys

取出雜湊的鍵,傳回一個陣列 :HashDemo3.pl
values

取出雜湊的值,傳回一個陣列 :HashDemo4.pl
each

取出雜湊的鍵 / 值對,傳回一個串列 :HashDemo5.pl
exists

判斷某鍵是否存在 :HashDemo6.pl
exists

判斷某鍵是否存在 :HashDemo7.pl
delete

將某一對鍵 / 值刪除 :HashDemo8.pl
新增一對鍵 / 值

HashDemo9.pl
特殊符號
變數的範圍

若沒有特別宣告,使用的變數為一全域變數

my 的關鍵字,可讓某一變數變成區域變數

VariableScope.pl
變數檢查

VariableCheck.pl
引號整理
引號整理
引號整理
Flow Control
if 控制結構

if 有四種形式 : IfDemo.pl
if 控制結構

if 有四種形式 :IfDemo.pl
unless

unless 是判斷條件為假時做某事 , 有三種形式 :UnlessDemo.pl
until

直到某事為真之前 ( 若它為假 ) ,都一直做某
事 :UntilDemo.pl
until

UntilDemo.pl
for

ForDemo.pl
while

WhileDemo.pl
foreach

ForeachDemo.pl
迴圈控制

LastDemo.pl
迴圈控制

LastDemo.pl
迴圈控制

NextDemo.pl
迴圈控制

RedoDemo.pl
Subroutine
Subroutines v.s Functions

Subroutines are chunk of code you defines.

Functions are provided by Perl.
Functions
Subroutine

我們經常把若干程式碼集合在一起,以完成特定
的功能,並且予以命名,俾供重覆叫用。像這樣
的區塊,我們稱為副程式或函式。
引數:傳入值

SubMaxDemo.pl

其中 my 使 $a 及 $b 變成區域變數,一旦副
程式結束,區域變數也就消失,不會影響主程式
中同名的變數。
叫用副程式

SubMaxDemo.pl
傳回值

如果副程式的運算結果需要傳回,可以使用
return 將結果傳回給叫用者去接收。

但如果副程式中沒有明顯使用 return ,則 Perl
將以最後一條敘述的執行結果,做為副程式的傳
回值。
範例:時間副程式

SubGetTimeDemo.pl
Regular Express
正規表示式

所謂正規表示式 (Regular Express) 是一種由字
元組成的樣式,用來比對資料,看看究竟符合或
不符合這個樣式,然後可做進一步的處理。比如
說:電子郵件位址的樣式,可寫成:
− ([w-])+@([w-])+(.[w-])+

正規表示式,也可以稱為是樣式 (Pattern) ,本
身自成一種小型的程式語言。由於在文件處理方
面,正規表示式經常可以發揮強大的功能,因
此,只要談到樣式比對,大家第一個聯想到的多
半是 Perl 這個語言。
樣式

BasicPatterns.pl

此例中, $str =~ /like it/ 意思是將 $str 和 "like
it" 這個樣式做比對,看看是否含有該字串? ( 結
果:有 )
樣式字元集
樣式字元集
正規表示式種類

Perl 的正規表示式,概可分成三類:比對、置
換、轉換。
− 比對:若比對成功則傳回真,不成功則傳回假。
− 置換:先進行樣式比對,若有相符的地方,則將相符
之處,置換成指定的字串。
− 轉換:做字元的變換或刪除字元的動作。
比對
比對
比對範例

BasicPatterns.pl
比對範例

BasicPatterns.pl
比對範例

BasicPatterns.pl
比對範例

BasicPatterns.pl

樣式中可以進行變數代換

樣式不符合,使用 !~ 符號
比對範例

BasicPatterns.pl

和檔案配合
比對範例

SpecialCharacters.pl

$& $` $' 的涵義
置換
置換範例

SubstitutingDemo.pl
置換範例

SubstitutingDemo.pl
置換範例

SubstitutingDemo.pl
轉換
轉換範例

TransformDemo.pl
轉換範例

TransformDemo.pl
轉換範例

TransformDemo.pl
References

Perl@Taiwan

http://www.cyut.edu.tw/~ckhung/b/pl/ by 洪朝貴

Online Ebook
http://www.unix.com.ua/orelly/perl/index.htm

Perl網路管理語言 入門與實作

More Related Content

PPT
Hash mac algorithms
PPTX
ssl-tls-ipsec-vpn.pptx
PDF
DIA 1 LIMA DISEÑO DE TANQUES DE ALMAC.pdf
PPTX
Information and data security public key cryptography and rsa
PPTX
Hash length extension attacks
DOCX
Corrida del diablo
PDF
საბანკო ტერმინების ინგლისურ-ქართული ლექსიკონი
PDF
Perl University: Getting Started with Perl
Hash mac algorithms
ssl-tls-ipsec-vpn.pptx
DIA 1 LIMA DISEÑO DE TANQUES DE ALMAC.pdf
Information and data security public key cryptography and rsa
Hash length extension attacks
Corrida del diablo
საბანკო ტერმინების ინგლისურ-ქართული ლექსიკონი
Perl University: Getting Started with Perl

Viewers also liked (6)

PDF
PERL- Bioperl modules
PPTX
PPT
Phylogenetic studies
PPT
Lecture1 1 Perl for bioinformatics Davide Pisani & James Cotton
PDF
Basics of bioinformatics
PPTX
Slideshare ppt
PERL- Bioperl modules
Phylogenetic studies
Lecture1 1 Perl for bioinformatics Davide Pisani & James Cotton
Basics of bioinformatics
Slideshare ppt
Ad

Similar to Perl For Bioinformatics (7)

PDF
Linq 入门
ODP
Erlang培训
PDF
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
PDF
iosdfoijehsogijlphpasjkdhiusghfripugsah;dfjkhs;kjfhi
PPT
Php extension开发
PPTX
Perl 4 sa
PDF
Python学习笔记
Linq 入门
Erlang培训
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
iosdfoijehsogijlphpasjkdhiusghfripugsah;dfjkhs;kjfhi
Php extension开发
Perl 4 sa
Python学习笔记
Ad

More from PingLun Liao (20)

PDF
深入探討 C 語言
ODP
Git 程式碼版本控制軟體介紹
PDF
給沒有程式設計經驗的人
PDF
陣列與指標
ODP
C++ STL 概觀
ODP
C++ Function
ODP
C 檔案輸入與輸出
ODP
Win32 視窗程式設計基礎
ODP
Matlab 在機率與統計的應用
ODP
Android 2D 遊戲設計基礎
ODP
Android 介面設計
ODP
Java 視窗程式設計
ODP
Java 網路程式
ODP
Android introduction
ODP
RESTful
ODP
Web service
ODP
How toprogram
ODP
Generic Programming
ODP
Object-Oriented Programming
ODP
Object-Based Programming Part II
深入探討 C 語言
Git 程式碼版本控制軟體介紹
給沒有程式設計經驗的人
陣列與指標
C++ STL 概觀
C++ Function
C 檔案輸入與輸出
Win32 視窗程式設計基礎
Matlab 在機率與統計的應用
Android 2D 遊戲設計基礎
Android 介面設計
Java 視窗程式設計
Java 網路程式
Android introduction
RESTful
Web service
How toprogram
Generic Programming
Object-Oriented Programming
Object-Based Programming Part II

Perl For Bioinformatics