如果你搞不清楚Perl與Pearl的 的區別,請先參考 Perl101。 Perl101 會告訴你什麼是Perl、如何安裝,與一個簡單的Perl Hello World。 想更了解Perl?請繼續看下去…
註解
- 註解使用
#
。 - Perl沒有區域註解。
資料結構
專業術語叫「資料結構」,不過我覺得用白話一點的資料型態,會比較好標示出這一段的重點。
Perl 只有3種資料型態: Scalar(純量變數)、Array(串列變數)和Hash(雜湊);沒有Boolean、日期,也不區分浮點數、整數之類的。
Scalar
是文字、數字,或是參考(Reference) 。Array
是一堆scalar在一塊,用數字做索引;Hash
則是用KEY做索引,而且沒有固定順序,有點類似Map
或是Dictionary
。 Scalar使用$
做為變數開頭,例如:
$thisIsScalar=100; # 最基礎的Scalar變數
$thisIsArray[0]=100; # thisIsArray變數的第一個元素
$thisIsHash{"K"}=100; #KEY值是K的元素
如果你想表示一整個Array或是Hash,則使用@
或是%
。例如:
@thisIsArray;
%thisIsHash;
但你是也可以特別的指出裡面的某些元素,例如:
@thisIsArray[0]=100;
%thisIshash{"K"}=100;
於是初學者就會很容易搞不清楚@
與$
的差別了… XD。
$thisIsArray[0];
@thisIsArray[0];
其實這兩種寫法或許是不同的語意,但是是相同的東西。Perl的一個好處就是相同的東西可以有不同的寫法,怎麼寫都對,非常容易上手! 不過這個卻是我在 Perl 101 中所提到的,我所不喜歡Perl的原因。 同樣一件事情,有不同的寫法。
陣列(Array)與串列(List)的差別
駱馬書(Perl界的聖經,Oreilly出版)上說:
基本上("A","B","C")這些是串列(list)。當串列assign 給一個變數時,這個變數稱陣列。
串列是純量的有序集合。陣列是一個包含了串列的變數。
老實說,一開始看到這段翻譯時,實在不知道在翻什麼。看完整章節後,覺得大概的意思是:Array是表示整個集合,使用@
作為識別,如果你想表達單一元素,則使用$
來表示。 致於詳細的內容就要請各位參照書籍了。
基本上在大多數有關於Array的操作,一般都是使用$thisIsArray[$i]來進行。 因為前面有提到,原則上@thisIsArray是表示整個串列。不過你可以在@thisIsArray後面,使用[
]
來特別示要取得一個陣列的那些元素,所以@thisIsArray[0]
其實是@thisIsArray[0,2,5]
的變型。
有了這個概念後,同樣可以套到Hash上去。 我們同樣可以用%thisIsHash
來表示$thisIsHash{"K"}
+$thisIsHash{"L"}
。
初始化
直接舉例。 不過如果想學好Perl的朋友,最好是開文字編輯器, 自己實際全部敲一次。
$thisIsScalar = "A";
$thisIsScalar =100;
$thisIsArray[0] = 100;
$thisIsArray[1] = 200;
@thisIsArray = (100,200);
$thisIsHash{"K"} = 100;
$thisIsHash{"L"} = 200;
%thisIsHash = ("M" => 100,"N" =>200);
@thisIsHash{"O","P"} = (100,200);
這裡歸納一下。 原則上,一般的變數操作, 單一給定型的,都是針對Scalar進行賦值。所以 不管是 thisIsScalar、thisIsArray、thisIsHash 都是使用$
。 一次給定型的,Array使用(
、)
給值,Hash使用()
加=>
來賦值。
這裡要特別指出@thisIsHash{"O","P"}
,他的前面綴符號之所會是@
,是因為他一次初始化了2個值。
比較特殊的操作
- $#x 取@x最後的index值
網路上的文章百百種,還是要看看官網的文件
一開始學習的Perl時,會依自己以前的經驗來解讀Perl。 不過在學習的過程中,建議還是回過頭來,閱讀一下官方文件,去了解Larry(Perl發明人)的想法。其實整個學習Perl的過程,可以說是就是學習Larry的想法,而官網的文件就是最原生、表達作者想法的媒界。
(不知道有沒有續)
沒有留言 :
張貼留言