2013年3月22日 星期五

《新 Perl 學習繪本》筆記

ㄧ、基本的格式

1.字串的格式:

%d:整數以 10 進位顯示。
%x、%X:整數以 16 進位顯示。
%f:顯示有小數點的數字。
%c:整數用對應 ASCII 碼表的文字表示。
%s:顯示字串。




二、陣列

1.陣列宣告方式:

指定清單:@x = (1, 2, 3);

指定值:$x[0] = (1);

清空陣列:$x = ();


2.對於已做清單的變數,可以按照順序將陣列元素帶入:

$x = (1, 2, 3);
($x1, $x2, $x3) = @x;


3.將陣列帶入變數中時,變數的值會變成陣列的元素數。


4.在陣列名稱前加上「$#」時,可得知元素索引的最大值。若無元素則返回 -1。


5.關聯陣列是將鍵與值整合成一套的東西:

指定清單:%x = ( "name" => "w1a2d3s4q5e6");

指定鍵與值:%x{"name"} = "w1a2d3s4q5e6";

關聯陣列中放陣列:
@x = ( "name");
%xx = ($x[0] => "w1a2d3s4q5e6");

清空陣列:%x = ();

刪除鍵與值:delete $x{"name"};


6.參考參照(指示變數等儲存位置、或是有資訊的變數)所指示的變數:

@x = (1, 2, 3, 4);
$y = \@x;

代入參照所指定的陣列:@z = @$y;

帶入參照所指定的陣列、所指定的儲存值:
$a = $y->[0]; 或 $a = $$y[0];


7.叢集(typeglob)會整合相同名字的變數或陣列等執行處理:

$x = "字串“;
@x = "清單";
%x = ("associative_arrays" => "關聯陣列");

*xxx = *x;

print "$xxx"."$xxx[0]"."xxx{"associative arrays"};


8.將陣列設定成未定義狀態:

undef($x);

查詢變數是否有 undef:defined($x);




三、控制敘述

1.if ~ elsif ~ else


2.當某條件達到時才處理: until


3.do ~ until


4.利用標籤(label)幫區塊命名:

LABEL1:{ .
...

next LABEL1; //中斷 for 或 while 敘述,並執行所指定標籤區塊起始的地方。若有 continue 時,會先執行 continue 的處理,再執行 next。

last LABEL1; //中斷 for 或 while 敘述,並跳到所指定標籤區塊結束的地方。
redo LABEL1; //中斷 for 或 while 敘述,並回到指定標籤區塊起始的地方,重新執行處理。
}




四、正規表示式

1.正規表示式中的 Meta 文字:

  • .:任意一個字。
  • *:0 次以上的反覆。
  • +:1 次以上的反覆。
  • ?:0 次或 1 次以上的反覆。
  • ^:開頭。
  • $:結尾。
  • |:選擇。
  • ():群組。
  • []:文字類別。
  • {n}:n 次反覆。
  • {n, }:n 次以上的反覆。
  • {n, m}:n 次以上,m 次以下的反覆。
  • \:將 Meta 文字當作文字處理。


2.特殊文字:

  • \w:半形英數字和底線。
  • \W:半形英數字和底線以外。
  • \s:空白。
  • \S:空白以外。
  • \d:數字。
  • \D:數字以外。


3.樣式查核:

符合:$result = "字串" =~ /關鍵字/; //符合為1(真),不符合為 undef。

不符合:$result = "字串" !~ /關鍵字/; // 不符合為 1,符合為 undef。


4.符合運算子(搜尋從某字串符合正規表示式的字串):

$result = "字串" =~ m/關鍵字/; 或 $result = "字串" =~ //關鍵字/;

選項:

  • g:找所有符合的東西。
  • i:不區分大小寫。
  • m:字串以複數行處理。
  • s:字串以單一行處理。
  • x:忽略包含在樣式中的半形空格。


5.置換運算子:

$x = "字串"

$result = $x =~ s/關鍵字/置換後的字串/;

選項:

  • e:把置換後的字串當成式子。
  • g:找到所有符合的東西。
  • i:不區別大小寫。
  • m:字串以複數行處理。
  • s:字串以單一行處理。
  • x:忽略樣式中半形空格。




五、子程式

1.呼叫子程式:

sub 子程式名稱{ ... }

$x = 子程式名稱(參數); //將參數傳至子程式,並把結果儲存至變數。


2.呼叫雛型(子程式所接受參數的值或種類的宣告):

sub 子程式名稱($$;@;其他種類...) { ... }

$x = 子程式名稱(參數);


3.套件(用於區別相同名字的變數或子程式的構造)的使用:

package pack1;
$x = "123";

package pack2;
$x = "456";

print "$pack1::$x"; //123
print "$pack2::$x"; //456


4.私有變數:

my $x = 1; 或 my( $x );


5.子程式中不止能賦值,也能交付參照或叢集。


6.程式庫的製作:

副檔名以「pl」結尾,並在檔案內容最後用「l;」描述。


7.程式庫的載入:

require "xxx.pl";


8.模組的制作:

副檔名以「pm」結尾,並在檔案內容最後用「l;」描述。


9.模組的載入:

use xxx;




六、檔案操作

1.開啓檔案:

open(FILE, "<檔名.副檔名");

關閉檔案:close(FILE);

選項:

  • <:從檔案開頭讀入。
  • >:製作新檔案,且從開頭寫出(既有檔案會不見)。
  • >>:從檔案的尾端寫出(沒有檔案時製作開新檔案)。


2.文字檔讀入:

$x = <FILE>; //第 1 行資料的讀入。

讀入所有的資料:@x = <FILE>;


3.檔案測試運算子:

$x = -e "檔案名稱.副檔名";

選項:

  • -e:檔案存在為 1,不存在為 undef。
  • -r:可以讀為 1,不可讀為 undef。
  • -w:可以寫為 1,不可寫為 undef。
  • -z:檔案大小是 0 為 1,檔案不存在為 undef。
  • -s:檔案大小,檔案不存在為 undef。


4.檔案操作:

變更檔名:rename("舊檔名.副檔名", "新檔名.副檔名");

刪除檔案:unlink("檔案名稱.副檔名");


5.標準輸出入:

標準輸入:STDIN。

標準輸出:STDOUT。

標準錯誤輸出:STDERR。


6.互斥控制檔案鎖檔:

flock(FILE, 2); //鎖定讀寫。

flock(FILE, 8); //解除鎖定。

沒有留言:

張貼留言