perl 是一門開源的指令碼語言,由
larry wall
所創造,該語言以實用,快速開發為主要目標,與當前流行的物件導向結構化程式設計有些格格不入,但這並不妨礙 perl 被廣泛流傳和使用,世界範圍內圍繞 perl 建立起了非常活躍的社群,很多人在其中不斷幫助完善文件,建立示例**,提供一些第三庫等等。具體可以瀏覽以下兩個網頁:www.cpan.org , www.perl.com.
perl 最出名也最擅長的要數文字處理了,很多其它語言要花幾十上百行**才能完成的任務,perl 可能只需要幾行**就能完成。但這些優勢是有代價的,perl 書寫**的風格有時常常被詬病,典型的面向過程式語言,各種眼花繚亂令人頭疼的符號,甚至 perl 一直以來所堅持的哲學:只要不引起衝突誤解,**可以寫成多種形式(there's more than one way to do it)。這導致 perl 在語法上具有非常鬆散隨意的特點:同一件事情常常有多種不同的寫法,有些看起來還很奇特,體現在語法上,perl 的符號特別多,讓 perl 在一定程度比較難學易忘。
本文主要簡單介紹一下 perl 的基本語法,目的是通過本文,你能了解 perl 基本
的寫法,能夠順利的去讀別人的**。天下的語言在一定程度上是相通的,如果有一門語言的基礎,去學另一本語言,入門基本不會太難(函式式除外吧。。。),但要用到熟,用到得心應手,第三庫的使用等,這些就需要耐心以及假以時日了。本節主要介紹一下各種資料型別.
《一》 語句及注釋:
perl 語句以分號(;)結尾,用 # 作為一行的注釋,沒有其它語言中那種跨行的注釋。**塊用大括號圍起來,這個和 c 類似,但這個大括號在有些地方是強制要求,如在 if ,for,do, while 等語句中,它不像其它語言一樣會用縮進來判斷塊。
《二》 變數: 標量(scalar) & 列表(list)
perl把簡單的資料型別,如字串,數字等「單數」的東西統稱為標量,與之相對的,就是「複數」的東西,如陣列。標量的宣告都是 $ 開始,如: $str = "abc"。多個標量也可以放一處一起宣告:
($x, $y, $z) = (11, 22, "no", 4);
而陣列的宣告則是以@開頭,如:@arr = ("abc","edf")。變數的宣告和很多其它指令碼語言一樣,不需要指明型別,直接宣告賦值就可以使用。如果只宣告但不賦值,perl 會預設給它賦值為:undef。
為了檢查乙個變數是否已被賦值,perl 提供了乙個操作符:defined,用於判斷乙個變數是否已經被賦值:
if( !defined( $myvar ) )
print "uninitialized variable";
《三》 字串
(1) 基本語法
在 perl 中,所有字串都是雙引號或單引號括起來的,如: "string" 'string'。這兩種方式在很多時候相同,不同的是當字串出現其它變數或轉義符號的時候,雙引號會將變數的內容展開,而單引號的不會,這和 shell script 是相似的,如:
$var = 234;
$str1 = "str1:$var"; # 列印出來得到-> str1:234
$str2 = 'str2:$var'; # 列印出來得到-> str2:$var
(2) 字串拼接
點號(.)用於把字串進行拼接,這個和其它一些語言直接把字串連在一起就行不一樣,要用點號把字串連起來,如:
$str = "abc"."efg"; # abcefg
很七,這個用法,和 shell script , vim script 也是一致的。
(3) 比較
這裡需要強調的,字串的比較要用:
而不要用== , >= , <= ,這些符號是用來比較數值型別的。
《四》 陣列
(1) 宣告
如前所說,陣列是乙個複數(plaural)形式的變數,它的宣告是以@開頭的,後面跟著小括號放入初始值:
@arr = (12,34,56);
同乙個陣列裡的元素型別不一定要一樣,下面的寫法也是合法的:
@arr = (12,"abc",'c');
當然,也可以宣告空陣列:
@arr = ();
宣告字串陣列時,可以用 q,qq,qw 系列操作符簡化操作。q 代表 quoted, qw 代表: quoted word.
@arr = qq(abc); # 等價於 ("abc")
@arr = qw(abc ef gg); # 等價於("abc","ef","gg")
@arr = q(abc); # 等價於('abc')
由上看出 qq 與 qw 的區別就在於,qq 是將括號中的整個內容當成乙個整體加上雙引號,而 qw 是以空格為分隔,如上第二個例子,abc, ef, gg 分別被加上了雙引號,而 q 與 qq 相似。這幾個操作符的好處在於,當你想在字串加入轉義符號,引號等符號時,會方便很多。
qq(\abc) eq 「\\abc"
qq("abc") eq 」\"abc\""
(2) 陣列訪問,插入
如果想訪問陣列裡的元素,就用中括號加下標的方法,和很多其它語言一樣,perl的陣列元素從0開始算:
print $arr[2];
有人可能注意到了,引用裡面元素的時候,又用了$,而不是@。這裡其實有乙個原則,用@時,是表示整個陣列,而引用其中的元素時,就用 $,後面將講到hash型別陣列,也是同樣的原則。上面是一次訪問乙個元素,如果需要取出 sub array(切片), 則應如下寫:
@sub_arr = @arr[1,4];
perl 中的陣列是沒有指定大小的,如果訪問了沒有定義的元素,就會返回 undef:
@arr = (1,2,3);
$ele = $arr[20]; # ele == undef
如果要往陣列中加入新元素,也可以直接用中括號+下標:
$arr[4] = 4; #如果不存在第4個元素就插入,存在就覆蓋。
(3) 轉換
下面提乙個很體現 perl 風格的問題,前面說到,用@引用 乙個陣列時,表示對整個陣列的引用,但這種引用在不同場合下(context)是表示不同含義的:
@arr = ("abc", "ed");
print "arr: @arr" ;
上面的 print 會將 arr 中的元素乙個個的提取出來展開列印,這個好理解,但如果我這樣寫呢:
$sz = @arr; #
把陣列賦值給乙個標量,perl 會把陣列的大小賦值給左邊的變數,所以上面的例子裡,$sz 等於2。如果perl沒法判斷,當前上下文是標量還是陣列,預設情況下,@arr 都會展開陣列:
@arr2 = (1,2,@arr); # arr2 == (1,2,"abc","ed").
但如果這時候,我是想讓 @arr 當作標量來處理,怎麼辦?上面的寫法是不行的。perl 規定,如果想要指明轉換為標量型別,就需要加上關鍵字: scalar.
@arr2 = (1,2,scalar @arr); # arr2 == (1,2,2)
(4) sort 排序功能
perl 為陣列提供了排序操作符:sort。預設情況下,sort 對陣列裡的元素按字母排序,然後返回乙個新的陣列,舊陣列不變。
@arr = ("abc","rsz","ef");
@newarr = sort(@arr);
# arr = abc rsz ef newarr = abc ef rsz.
如果陣列裡存的不是字元,或你不想按字元序排序, 可以指定按數字的方式排序。
sort ( @array)
大括號表示乙個比較函式,<=> 是指數值比較,$a 和 $b 表示比較的兩個數,這兩個變數是語言預定義的變數不可以更改。如果把a,b的順序調換一下,就表示反過來排序,如果用了數值排序,而陣列中又有字串元素,那字串都被當作 0,如果有多個字串,字串之間仍按字母序來排序。如:
@arr = (22,44,33,-12,gg ,hh)
sort("; #列印出:value1.
上面的初始化語句在 key,value 很多時可讀性很差,因此,perl 又提供了另一種寫法:
%hash = ("key1"=>"value1","key2"=>"value2");
其中符號 => 與逗號的效果是完全一樣,但這種寫法看起來,就比較容易分辨別哪個是 key, 哪個是 value.
(2) 插入,刪除與修改
hash 的插入與修改在語法上是完全一樣的。
$hash = "value";
如果 hash 陣列中原來沒有 「key」,就插入;如果有"key"及相應"value",如果原來有相應的 "key",就修改相應的 value 為新的 「value"。與此同時,perl 提供了乙個 delete 操作符來刪除 hash 中的元素,如: delete $hash;
(3) 獲取 key 與 value.
perl 提供了keys 和 values 這兩個函式來獲取 hash 中的全部 key,value。這兩個操作符返回的是乙個陣列,如:
%hash = ("k1"=>"v1","k2"=>"v2");
@k = keys (%hash); #k == ("k1","k2")
@v = values(%hash); #v == ("v1","v2")
總結
本節主要介紹了 perl 裡一些常用的資料型別,由上可以看出 perl 的語法是非常簡潔直接的,但細節較多,上手並不難,但要用熟就要花些時間了。
perl 入門知識(1)
一 語句及注釋 perl 語句以分號 結尾,用 作為一行的注釋,沒有其它語言中那種跨行的注釋。塊用大括號圍起來,這個和 c 類似,但這個大括號在有些地方是強制要求,如在 if for,do,while 等語句中,它不像其它語言一樣會用縮進來判斷塊。二 變數 標量 scalar 列表 list per...
Perl簡易教程(1) perl 介紹
perl的簡介 perl作為乙個排名程式語言前十的語言,必然有其特到之處。1.簡單的資料型別 2.內建正規表示式 3.強大的cpan支援 雜項介紹 1.perl的檔案以pl為字尾,perl的模組檔案以pm為字尾。2.perl檔案開頭是 usr bin perl 3.注釋。i.行注釋以 作為開頭。ii...
perl 入門推薦
learn perl in y minutes perlretut perldoc.perl.org 正規表示式,是perl的精華所在,也是各種指令碼語言的極重要的基礎 正規表示式,都差不多 perl 正規表示式 菜鳥教程 perldoc perldoc.perl.org perldoc,是perl...