大家好啊,我來更新第二篇博客了,這篇博客給大家分享一下Perl的教程
分為了上中下三篇哦~~~
?????????????????????????????
我滴主頁:???小石榴與兄棣伙的結(jié)合體(*^▽^*)_-CSDN博客
?希望大家三連+關(guān)注?。?!
Perl 教程
Perl 是 Practical Extraction and Report Language 的縮寫,可翻譯為 "實用報表提取語言"。
Perl 是高級、通用、直譯式、動態(tài)的程序語言。
Perl 最初的設(shè)計者為拉里·沃爾(Larry Wall),于1987年12月18日發(fā)表。
Perl 借用了C、sed、awk、shell腳本以及很多其他編程語言的特性。
Perl 最重要的特性是Perl內(nèi)部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。
誰適合閱讀本教程?
本教程適合想從零開始學習 Perl 編程語言的開發(fā)人員。當然本教程也會對一些模塊進行深入,讓你更好的了解 Perl 的應(yīng)用。
學習本教程前你需要了解
在繼續(xù)本教程之前,你應(yīng)該了解一些基本的計算機編程術(shù)語。如果你學習過PHP,ASP等其他編程語言,將有助于你更快的了解 Perl 編程。
第一個 Perl 程序
對于大多數(shù)程序語言,第一個入門編程代碼便是"Hello World!",以下代碼為使用 Perl 輸出"Hello World!":
實例
#!/usr/bin/perl print "Hello, World!\n";
Perl 簡介
Perl,一種功能豐富的計算機程序語言,運行在超過100種計算機平臺上,適用廣泛,從大型機到便攜設(shè)備,從快速原型創(chuàng)建到大規(guī)??蓴U展開發(fā)。
Perl 語言的應(yīng)用范圍很廣,除CGI以外,Perl被用于圖形編程、系統(tǒng)管理、網(wǎng)絡(luò)編程、金融、生物以及其他領(lǐng)域。由于其靈活性,Perl被稱為腳本語言中的瑞士軍刀。
什么是 Perl?
Perl是由Larry Wall設(shè)計的,并由他不斷更新和維護的編程語言。
Perl具有高級語言(如C)的強大能力和靈活性。事實上,你將看到,它的許多特性是從C語言中借用來的。
Perl與腳本語言一樣,Perl不需要編譯器和鏈接器來運行代碼,你要做的只是寫出程序并告訴Perl來運行而已。這意味著Perl對于小的編程問題的快速解決方案和為大型事件創(chuàng)建原型來測試潛在的解決方案是十分理想的。
Perl提供腳本語言(如sed和awk)的所有功能,還具有它們所不具備的很多功能。Perl還支持sed到Perl及awk到Perl的翻譯器。
簡而言之,Perl像C一樣強大,像awk、sed等腳本描述語言一樣方便。
Perl 優(yōu)點
- 相比C、Pascal這樣的"高級"語言而言,Perl語言直接提供泛型變量、動態(tài)數(shù)組、Hash表等更加便捷的編程元素。
- Perl具有動態(tài)語言的強大靈活的特性,并且還從C/C++、Basic、Pascal等語言中分別借鑒了語法規(guī)則,從而提供了許多冗余語法。
- 在統(tǒng)一變量類型和掩蓋運算細節(jié)方面,Perl做得比其他高級語言(如:Python)更為出色。
- 由于從其他語言大量借鑒了語法,使得從其他編程語言轉(zhuǎn)到Perl語言的程序員可以迅速上手寫程序并完成任務(wù),這使得Perl語言是一門容易用的語言。
- Perl 是可擴展的,我們可以通過CPAN("the Comprehensive Perl Archive Network"全面的 Perl 存檔網(wǎng)絡(luò))中心倉庫找到很多我們需要的模塊。
-
Perl 的?mod_perl?的模塊允許 Apache web 服務(wù)器使用 Perl 解釋器。
Perl 缺點
也正是因為Perl的靈活性和"過度"的冗余語法,也因此獲得了僅寫(write-only)的"美譽",因為Perl程序可以寫得很隨意(例如,變量不經(jīng)聲明就可以直接使用),但是可能少寫一些字母就會得到意想不到的結(jié)果(而不報錯),許多Perl程序的代碼令人難以閱讀,實現(xiàn)相同功能的程序代碼長度可以相差十倍百倍,這就令程序的維護者(甚至是編寫者)難以維護。
同樣的,因為Perl這樣隨意的特點,可能會導致一些Perl程序員遺忘語法,以至于不得不經(jīng)常查看Perl手冊。
建議的解決方法是在程序里使用use strict;以及use warnings;,并統(tǒng)一代碼風格,使用庫,而不是自己使用"硬編碼"。Perl同樣可以將代碼書寫得像Python或Ruby等語言一樣優(yōu)雅。
很多時候,perl.exe進程會占用很多的內(nèi)存空間,雖然只是一時,但是感覺不好。
Perl 環(huán)境安裝
在我們開始學習 Perl 語言前,我們需要先安裝 Perl 的執(zhí)行環(huán)境。
Perl 可以在以下平臺下運行:
- Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX etc.)
- Win 9x/NT/2000/
- WinCE
- Macintosh (PPC, 68K)
- Solaris (x86, SPARC)
- OpenVMS
- Alpha (7.2 and later)
- Symbian
- Debian GNU/kFreeBSD
- MirOS BSD
- 等等...
很多系統(tǒng)平臺上已經(jīng)默認安裝了 perl,我們可以通過以下命令來查看是否已安裝:
$ perl -v This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level (with 2 registered patches, see perl -V for more detail) Copyright 1987-2013, Larry Wall ……
如果輸出以上信息說明已安裝,如果還未安裝,可以看接下來的安裝指導。
安裝 Perl
我們可以在 Perl 的官網(wǎng)下載對應(yīng)平臺的安裝包:Perl Download - www.perl.org
Perl 基礎(chǔ)語法
Perl 借用了C、sed、awk、shell腳本以及很多其他編程語言的特性,語法與這些語言有些類似,也有自己的特點。
Perl 程序由聲明與語句組成,程序自上而下執(zhí)行,包含了循環(huán),條件控制,每個語句以分號?;?結(jié)束。
Perl 語言沒有嚴格的格式規(guī)范,你可以根據(jù)自己喜歡的風格來縮進。
第一個 perl 程序
交互式編程
你可以在命令行中使用?-e?選項來輸入語句來執(zhí)行代碼,實例如下:
$ perl -e 'print "Hello World\n"'
輸入以上命令,回車后,輸出結(jié)果為:
Hello World
腳本式編程
我們將以下代碼放到?hello.pl?文件中:
實例
#!/usr/bin/perl # 輸出 "Hello, World" print "Hello, world\n";
代碼中?/usr/bin/perl?是 perl 解釋器的路徑。在執(zhí)行該腳本前要先確保文件有可執(zhí)行權(quán)限,我們可以先將文件權(quán)限修改為 0755 :
$ chmod 0755 hello.pl $ ./hello.pl Hello, world # 輸出結(jié)果
print 也可以使用括號來輸出字符串,以下兩個語句輸出相同的結(jié)果:
print("Hello, world\n"); print "Hello, world\n";
腳本文件
perl 代碼可以寫在一個文本文件中,以 .pl、.PL 作為后綴。
文件名可以包含數(shù)字,符號和字母,但不能包含空格,可以使用下劃線(_)來替代空格。
一個簡單的Perl 文件名:
run_oob.pl
注釋
使用注釋使你的程序易讀,這是好的編程習慣。
perl 注釋的方法為在語句的開頭用字符#,如:
# 這一行是 perl 中的注釋
perl 也支持多行注釋,最常用的方法是使用 POD(Plain Old Documentations) 來進行多行注釋。方法如下:
實例
#!/usr/bin/perl # 這是一個單行注釋 print "Hello, world\n"; =pod 注釋 這是一個多行注釋 這是一個多行注釋 這是一個多行注釋 這是一個多行注釋 =cut
執(zhí)行以上程序,輸出結(jié)果為:
Hello, world
注意:
- =pod、 =cut只能在行首。
- 以=開頭,以=cut結(jié)尾。
- =后面要緊接一個字符,=cut后面可以不用。
Perl 中的空白
Perl 解釋器不會關(guān)心有多少個空白,以下程序也能正常運行:
實例
#!/usr/bin/perl print "Hello, world\n";
執(zhí)行以上程序,輸出結(jié)果為:
Hello, world
但是如果空格和分行出現(xiàn)在字符串內(nèi),他會原樣輸出:
實例
#!/usr/bin/perl # 會輸出分行 print "Hello world\n";
執(zhí)行以上程序,輸出結(jié)果為:
Hello world
所有類型的空白如:空格,tab ,空行等如果在引號外解釋器會忽略它,如果在引號內(nèi)會原樣輸出。
單引號和雙引號
perl 輸出字符串可以使用單引號和雙引號,如下所示:
實例
#!/usr/bin/perl print "Hello, world\n"; # 雙引號 print 'Hello, world\n'; # 單引號
輸出結(jié)果如下:
Hello, world Hello, world\n
從結(jié)果中我們可以看出,雙引號 \n 輸出了換行,而單引號沒有。
Perl雙引號和單引號的區(qū)別: 雙引號可以正常解析一些轉(zhuǎn)義字符與變量,而單引號無法解析會原樣輸出。
實例
#!/usr/bin/perl $a = 10; print "a = $a\n"; print 'a = $a\n';
輸出結(jié)果如下:
a = 10 a = $a\n
Here 文檔
Here文檔又稱作heredoc、hereis、here-字串或here-腳本,是一種在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序語言(像Perl、PHP、Python和Ruby)里定義一個字串的方法。
使用概述:
- 1、必須后接分號,否則編譯通不過。
- 2、EOF 可以用任意其它字符代替,只需保證結(jié)束標識與開始標識一致。
- 3、結(jié)束標識必須頂格獨自占一行(即必須從行首開始,前后不能銜接任何空白和字符)。
- 4、開始標識可以不帶引號號或帶單雙引號,不帶引號與帶雙引號效果一致,解釋內(nèi)嵌的變量和轉(zhuǎn)義符號,帶單引號則不解釋內(nèi)嵌的變量和轉(zhuǎn)義符號。
- 5、當內(nèi)容需要內(nèi)嵌引號(單引號或雙引號)時,不需要加轉(zhuǎn)義符,本身對單雙引號轉(zhuǎn)義,此處相當與 q 和 qq 的用法。
實例
#!/usr/bin/perl $a = 10; $var = <<"EOF"; 這是一個 Here 文檔實例,使用雙引號。 可以在這輸入字符串和變量。 例如:a = $a EOF print "$var\n"; $var = <<'EOF'; 這是一個 Here 文檔實例,使用單引號。 例如:a = $a EOF print "$var\n";
執(zhí)行以上程序輸出結(jié)果為:
這是一個 Here 文檔實例,使用雙引號。 可以在這輸入字符串和變量。 例如:a = 10 這是一個 Here 文檔實例,使用單引號。 例如:a = $a
轉(zhuǎn)義字符
如果我們需要輸出一個特殊的字符,可以使用反斜線(\)來轉(zhuǎn)義,例如輸出美元符號($):
實例
#!/usr/bin/perl $result = "菜鳥教程 \"runoob\""; print "$result\n"; print "\$result\n";
執(zhí)行以上程序輸出結(jié)果為:
Perl 標識符
Perl 標識符是用戶編程時使用的名字,在程序中使用的變量名,常量名,函數(shù)名,語句塊名等統(tǒng)稱為標識符。
- 標識符組成單元:英文字母(a~z,A~Z),數(shù)字(0~9)和下劃線(_)。
- 標識符由英文字母或下劃線開頭。
- 標識符區(qū)分大小寫,$runoob 與 $Runoob 表示兩個不同變量。
?
Perl 數(shù)據(jù)類型
Perl 是一種弱類型語言,所以變量不需要指定類型,Perl 解釋器會根據(jù)上下文自動選擇匹配類型。
Perl 有三個基本的數(shù)據(jù)類型:標量、數(shù)組、哈希。以下是這三種數(shù)據(jù)類型的說明:
序號 | 類型和描述 |
---|---|
1 |
標量 標量是 Perl 語言中最簡單的一種數(shù)據(jù)類型。這種數(shù)據(jù)類型的變量可以是數(shù)字,字符串,浮點數(shù),不作嚴格的區(qū)分。在使用時在變量的名字前面加上一個?$,表示是標量。例如: $myfirst=123; #數(shù)字123 $mysecond="123"; #字符串123 |
2 |
數(shù)組 數(shù)組變量以字符?@?開頭,索引從 0 開始,如:@arr=(1,2,3) @arr=(1,2,3) |
3 |
哈希 哈希是一個無序的?key/value?對集合??梢允褂面I作為下標獲取值。哈希變量以字符?%?開頭。 %h=('a'=>1,'b'=>2); |
數(shù)字字面量
一、整型
Perl 實際上把整數(shù)存在你的計算機中的浮點寄存器中,所以實際上被當作浮點數(shù)看待。
在多數(shù)計算機中,浮點寄存器可以存貯約 16 位數(shù)字,長于此的被丟棄。整數(shù)實為浮點數(shù)的特例。
整型變量及運算:
$x = 12345; if (1217 + 116 == 1333) { ????# 執(zhí)行代碼語句塊 }
8 進制和 16 進制數(shù):8 進制以 0 開始,16 進制以 0x 開始。例如:
$var1 = 047; # 等于十進制的39 $var2 = 0x1f; # 等于十進制的31
二、浮點數(shù)
浮點數(shù)數(shù)據(jù)如:11.4 、 -0.3 、.3 、 3. 、 54.1e+02 、 5.41e03。
浮點寄存器通常不能精確地存貯浮點數(shù),從而產(chǎn)生誤差,在運算和比較中要特別注意。指數(shù)的范圍通常為 -309 到 +308。
實例
#!/usr/bin/perl $value = 9.01e+21 + 0.01 - 9.01e+21; print ("第一個值為:", $value, "\n"); $value = 9.01e+21 - 9.01e+21 + 0.01; print ("第二個值為:", $value, "\n");
執(zhí)行以上程序,輸出結(jié)果為:
第一個值為:0 第二個值為:0.01
三、字符串
Perl 中的字符串使用一個標量來表示,定義方式和 c 很像,但是在 Perl 里面字符串不是用 \0 來表示結(jié)束的。
Perl 雙引號和單引號的區(qū)別: 雙引號可以正常解析一些轉(zhuǎn)義字符與變量,而單引號無法解析會原樣輸出。
但是用單引號定義可以使用多行文本,如下所示:
#!/usr/bin/perl $var='這是一個使用 多行字符串文本 的例子'; print($var);
執(zhí)行以上程序,輸出結(jié)果為:
這是一個使用 多行字符串文本 的例子
Perl 語言中常用的一些轉(zhuǎn)義字符如下表所示:
轉(zhuǎn)義字符 | 含義 |
---|---|
\\ | 反斜線 |
\' | 單引號 |
\" | 雙引號 |
\a | 系統(tǒng)響鈴 |
\b | 退格 |
\f | 換頁符 |
\n | 換行 |
\r | 回車 |
\t | 水平制表符 |
\v | 垂直制表符 |
\0nn | 創(chuàng)建八進制格式的數(shù)字 |
\xnn | 創(chuàng)建十六進制格式的數(shù)字 |
\cX | 控制字符,x可以是任何字符 |
\u | 強制下一個字符為大寫 |
\l | 強制下一個字符為小寫 |
\U | 強制將所有字符轉(zhuǎn)換為大寫 |
\L | 強制將所有的字符轉(zhuǎn)換為小寫 |
\Q | 將到\E為止的非單詞(non-word)字符加上反斜線 |
\E | 結(jié)束\L、\U、\Q |
Perl 變量
變量是存儲在內(nèi)存中的數(shù)據(jù),創(chuàng)建一個變量即會在內(nèi)存上開辟一個空間。
解釋器會根據(jù)變量的類型來決定其在內(nèi)存中的存儲空間,因此你可以為變量分配不同的數(shù)據(jù)類型,如整型、浮點型、字符串等。
上一章節(jié)中我們已經(jīng)為大家介紹了Perl的三個基本的數(shù)據(jù)類型:標量、數(shù)組、哈希。
- 標量 $ 開始, 如$a $b 是兩個標量。
- 數(shù)組 @ 開始 , 如 @a @b 是兩個數(shù)組。
- 哈希 % 開始 , %a %b 是兩個哈希。
Perl 為每個變量類型設(shè)置了獨立的命令空間,所以不同類型的變量可以使用相同的名稱,你不用擔心會發(fā)生沖突。例如 $foo 和 @foo 是兩個不同的變量。
創(chuàng)建變量
變量不需要顯式聲明類型,在變量賦值后,解釋器會自動分配匹配的類型空間。
變量使用等號(=)來賦值。
我們可以在程序中使用?use strict?語句讓所有變量需要強制聲明類型。
等號左邊為變量,右邊為值,實例如下:
$age = 25; # 整型 $name = "runoob"; # 字符串 $salary = 1445.50; # 浮點數(shù)
以上代碼中 25, "runoob" 和 1445.50 分別賦值給?$age,?$name?和?$salary?變量。
接下來我們會看到數(shù)組和哈希的使用。
標量變量
標量是一個單一的數(shù)據(jù)單元。 數(shù)據(jù)可以是整數(shù),浮點數(shù),字符,字符串,段落等。簡單的說它可以是任何東西。以下是標量的簡單應(yīng)用:
實例
#!/usr/bin/perl $age = 25; # 整型 $name = "runoob"; # 字符串 $salary = 1445.50; # 浮點數(shù) print "Age = $age\n"; print "Name = $name\n"; print "Salary = $salary\n";
以上程序執(zhí)行輸出結(jié)果為:
Age = 25 Name = runoob Salary = 1445.5
數(shù)組變量
數(shù)組是用于存儲一個有序的標量值的變量。
數(shù)組 @ 開始。
要訪問數(shù)組的變量,可以使用美元符號($)+變量名,并指定下標來訪問,實例如下所示:
實例
#!/usr/bin/perl @ages = (25, 30, 40); @names = ("google", "runoob", "taobao"); print "\$ages[0] = $ages[0]\n"; print "\$ages[1] = $ages[1]\n"; print "\$ages[2] = $ages[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";
以上程序執(zhí)行輸出結(jié)果為:
$ages[0] = 25 $ages[1] = 30 $ages[2] = 40 $names[0] = google $names[1] = runoob $names[2] = taobao
程序中我們在 $ 標記前使用了轉(zhuǎn)義字符 (\) ,這樣才能輸出字符 $。
哈希變量
哈希是一個?key/value?對的集合。
哈希 % 開始。
如果要訪問哈希值,可以使用?$ + {key}?格式來訪問:
實例
#!/usr/bin/perl %data = ('google', 45, 'runoob', 30, 'taobao', 40); print "\$data{'google'} = $data{'google'}\n"; print "\$data{'runoob'} = $data{'runoob'}\n"; print "\$data{'taobao'} = $data{'taobao'}\n";
以上程序執(zhí)行輸出結(jié)果為:
$data{'google'} = 45 $data{'runoob'} = 30 $data{'taobao'} = 40
變量上下文
所謂上下文:指的是表達式所在的位置。
上下文是由等號左邊的變量類型決定的,等號左邊是標量,則是標量上下文,等號左邊是列表,則是列表上下文。
Perl 解釋器會根據(jù)上下文來決定變量的類型。實例如下:
實例
#!/usr/bin/perl @names = ('google', 'runoob', 'taobao'); @copy = @names; # 復制數(shù)組 $size = @names; # 數(shù)組賦值給標量,返回數(shù)組元素個數(shù) print "名字為 : @copy\n"; print "名字數(shù)為 : $size\n";
以上程序執(zhí)行輸出結(jié)果為:
名字為 : google runoob taobao 名字數(shù)為 : 3
代碼中 @names 是一個數(shù)組,它應(yīng)用在了兩個不同的上下文中。第一個將其復制給另外一個數(shù)組,所以它輸出了數(shù)組的所有元素。第二個我們將數(shù)組賦值給一個標量,它返回了數(shù)組的元素個數(shù)。
以下列出了多種不同的上下文:
序號 | 上下文及描述 |
---|---|
1 |
標量 ? 賦值給一個標量變量,在標量上下文的右側(cè)計算 |
2 |
列表 ? 賦值給一個數(shù)組或哈希,在列表上下文的右側(cè)計算。 |
3 |
布爾 ? 布爾上下文是一個簡單的表達式計算,查看是否為 true 或 false。 |
4 |
Void ? 這種上下文不需要關(guān)系返回什么值,一般不需要返回值。 |
5 |
插值 ? 這種上下文只發(fā)生在引號內(nèi)。 |
好了,今天先到這吧
最后別忘了
點贊,收藏,評論,關(guān)注?。?!
愛你們哦??文章來源:http://www.zghlxwxcb.cn/news/detail-714913.html
????????????文章來源地址http://www.zghlxwxcb.cn/news/detail-714913.html
到了這里,關(guān)于小白的初次更新------Perl教程(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!