Google Prettify

2015-03-06

Perl 教學 102

如果你搞不清楚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的想法,而官網的文件就是最原生、表達作者想法的媒界。

(不知道有沒有續)

沒有留言 :

您或許對這些有興趣

Related Posts with Thumbnails

最後

謝謝您的閱讀,希望您可以有豐富的收獲。