由於公司需要用到perl,於是學習了一下(持續更新)
perl,一種功能豐富的計算機程式語言,執行在超過100種計算機平台上,適用廣泛,從大型機到便攜裝置,從快速原型建立到大規模可擴充套件開發。
perl 語言的應用範圍很廣,除cgi以外,perl被用於圖形程式設計、系統管理、網路程式設計、金融、生物以及其他領域。由於其靈活性,perl被稱為指令碼語言中的瑞士軍刀。
perl是由larry wall設計的,並由他不斷更新和維護的程式語言。
perl具有高階語言(如c)的強大能力和靈活性。事實上,你將看到,它的許多特性是從c語言中借用來的。
perl與指令碼語言一樣,perl不需要編譯器和鏈結器來執行**,你要做的只是寫出程式並告訴perl來執行而已。這意味著perl對於小的程式設計問題的快速解決方案和為大型事件建立原型來測試潛在的解決方案是十分理想的。
perl提供指令碼語言(如sed和awk)的所有功能,還具有它們所不具備的很多功能。perl還支援sed到perl及awk到perl的翻譯器。
簡而言之,perl像c一樣強大,像awk、sed等指令碼描述語言一樣方便。
perl 優點
也正是因為perl的靈活性和"過度"的冗餘語法,也因此獲得了僅寫(write-only)的"美譽",因為perl程式可以寫得很隨意(例如,變數不經宣告就可以直接使用),但是可能少寫一些字母就會得到意想不到的結果(而不報錯),許多perl程式的**令人難以閱讀,實現相同功能的程式**長度可以相差十倍百倍,這就令程式的維護者(甚至是編寫者)難以維護。
同樣的,因為perl這樣隨意的特點,可能會導致一些perl程式設計師遺忘語法,以至於不得不經常檢視perl手冊。
建議的解決方法是在程式裡使用use strict;以及use warnings;,並統一**風格,使用庫,而不是自己使用"硬編碼"。perl同樣可以將**書寫得像python或ruby等語言一樣優雅。
很多時候,perl.exe程序會占用很多的記憶體空間,雖然只是一時,但是感覺不好。
here文件又稱作heredoc、hereis、here-字串或here-指令碼,是一種在命令列shell(如sh、csh、ksh、bash、powershell和zsh)和程式語言(像perl、php、python和ruby)裡定義乙個字串的方法。
使用概述:
1.必須後接分號,否則編譯通不過。
2.end可以用任意其它字元代替,只需保證結束標識與開始標識一致。
3.結束標識必須頂格獨自佔一行(即必須從行首開始,前後不能銜接任何空白和字元)。
4.開始標識可以不帶引號號或帶單雙引號,不帶引號與帶雙引號效果一致,解釋內嵌的變數和轉義符號,帶單引號則不解釋內嵌的變數和轉義符號。
5.當內容需要內嵌引號(單引號或雙引號)時,不需要加轉義符,本身對單雙引號轉義,此處相當與q和qq的用法。
例子:#!/usr/bin/perl $a = 10; $var = <
perl 是一種弱型別語言,所以變數不需要指定型別,perl 直譯器會根據上下文自動選擇匹配型別。
perl 有三個基本的資料型別:標量、陣列、雜湊。以下是這三種資料型別的說明:
$myfirst=123; #數字123 $mysecond="123"; #字串123
陣列變數以字元 @ 開頭,索引從 0 開始,如:@arr=(1,2,3)
@arr=(1,2,3)
獲取值:$arr[x]
獲取最後乙個元素的編號 $#;
push(@passengers,\%passenger);
雜湊是乙個無序的 key/value 對集合。可以使用鍵作為下標獲取值。雜湊變數以字元 % 開頭。
如果重複,後者覆蓋前者。
多種寫法:
$data = 'facebook.com';
所謂上下文:指的是表示式所在的位置。
上下文是由等號左邊的變數型別決定的,等號左邊是標量,則是標量上下文,等號左邊是列表,則是列表上下文。
perl 直譯器會根據上下文來決定變數的型別。例項如下:
#!/usr/bin/perl @names = ('google', 'runoob', 'taobao'); @copy = @names; # 複製陣列 $size = @names; # 陣列賦值給標量,返回陣列元素個數 print "名字為 : @copy\n"; print "名字數為 : $size\n"; 以上程式執行輸出結果為: 名字為 : google runoob taobao 名字數為 : 3
序號 上下文及描述
標量 −
賦值給乙個標量變數,在標量上下文的右側計算
列表 −
賦值給乙個陣列或雜湊,在列表上下文的右側計算。
布林 −
布林上下文是乙個簡單的表示式計算,檢視是否為 true 或 false。
void −
這種上下文不需要關係返回什麼值,一般不需要返回值。
插值 −
這種上下文只發生在引號內。
不同型別的變數可以用同個名稱(符號型別不同)例如 $foo 和 @foo 是兩個不同的變數。
qq("我是字串")
q("我是字串")
上面這種格式幾乎跟雙引號一模一樣,並且並不是一定強制要用 () ,可以用任何的界限字元
標量 $ 開始, 如$a $b 是兩個標量。
陣列 @ 開始 , 如 @a @b 是兩個陣列。
雜湊 % 開始 , %a %b 是兩個雜湊。
可以等價於:
$someword = q~i 've some money~;
$someword = "i say \"ok!\".";
可以等價於:
$someword = qq~i say "ok!".~;
@list = ("perl","regular","network","web");
可以等價於:
@list = qw(perl regular network web);
$myword = "catcat";
$replaceword = qr(catcat);
$finalword = "ok" if ($myword =~ $replaceword);
引號執行運算子(quoted execution operator),qx//
※ q 和 qq 必須是乙個識別符號,而不是識別符號的部分。例如:
q (abc) 用 () 作為分界符
q(abc) 用 () 作為分界符
q xabcx 用 x 作為分界符
都是合法的,而
qxabcx 就會被當作是乙個識別符號來處理,有誰會想到 qxabcx 居然是乙個 q 表示式呢?
※ q 和 qq 後面的空格並不會影響語法,但是任何非空字元(不是空格、不是 tab 字元、
不是換行符)則會被當作界限符來使用。
※ 如果 q 和 qq 使用一些特殊的符號的時候,則必須配對。比如:< 只能和 >; 在一起
用來當作界限符,而不能只用兩個 < 作為界限符。而 | 則只能和它自己作為一對界
限符。這些特殊的符號有:()、{}、、<>;
$a在前面是公升序
$b在前面是降序
@testsort=qw(5 7 1 2 4 3); @rtestsort=sort @testsort; print @rtestsort;
@testsort=qw(5 7 1 2 4 3); @rtestsort2=reverse @testsort; print @rtestsort2;
perl關鍵字(grep)
grep(***,array) 它會遍歷array,將array的每個值放到***{}中去匹配 如果中了就返回, 返回可以接受乙個陣列。 去重!!!!!!!!!!!!!!!!!!!!!!! my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 ); my %count; my @uniq_times = grep < 2; } @array;
位址有詳細說明
my @arr_countrys_array=split(/\//,$arr_countrys); foreach $arr (@dep_countrys_array)
Swift語言簡介 快速上手
相關 swift語言學習文件英文版 swift 平行的指令碼語言.快速簡便的並行指令碼 在多核,集群,超級計算機和雲。swift swift 可以讓你編寫並行執行的指令碼普通程式的多個副本同時,使用這樣的語句。foreach protein in proteinlist 更多便是 誰在使用 swif...
Solidity 語言簡易入門,快速上手!
solidity語言是一種可以編寫智慧型合約的高階語言,當然編寫智慧型合約不止這一種,但是學習以太坊最好還是學會這一種語言就差不多了。在以太坊平台上,solidiy編寫的智慧型合約會執行在以太坊虛擬機器evm之上,變成位元組碼執行。新手入門建議使用官方ide開發工具remix。solidity語言中...
ibatis 快速上手
簡介 例子 現在我們我們通過乙個簡單的案例,了解如何通過ibatis解決資料訪問問題。現在有有乙個資料庫,資料庫裡面有一張人員資訊表 需求是這樣 通過乙個web應用程式顯示人員資訊表裡面的資訊,並且可以新增 修改 刪除人員記錄 乙個並不複雜的案例,但是它覆蓋所有開發首先要學習的內容。第1步 the ...