2013年3月23日 星期六

《Perl 學習手冊》筆記

一、純量資料

1.去除結尾處之換列字符:

chomp($x = <STDIN>);

若字串結尾處沒有換列字符,則會回傳 0。




二、串列與陣列

1.串列(list)指的是純量的有序集合;陣列(array)是一個包含了串列的變數。


2.串列指的是資料陣列指的是儲存資料的變數


3. 建立串列時不用打引號的方法:

@x = qw(a b c d e);

@y = qw{ name age};


4.串列的賦值:

($name, $age) = qw(w1a2d3s4q5e6 21);


5.取出陣列中最後一個元素,並將它傳回:

pop(@x);


6.添加一個元素到陣列的尾端:

push(@x, f);


7.取出陣列中第一個元素,並將它傳回:

shift(@x);


8.添加一個元素到陣列的開頭:

unshift(@x, f);


9.在陣列的中間新增或移除元素:

@y = splice @x, 1, 2, qw(f); //移除 b、c,並在陣列尾端加入 f。

splice 格式:第一個引數為陣列;第二個引數為你想要開始的位置;第三個引數(可選)為長度;第四個引數(可選)為替代陣列,讓你放入其他元素。


10.依反向順序傳回串列或字串的值:

@xx = reverse(@x);


11.根據串列或字串內部的字母順序排序:

@xx = sort(@x); //數字不管用。


12.為陣列的下個元素傳回其索引值與其值:

($index, value) = each(@x);


13.強制指定純量語境:

scalar(@x) b




三、子程式

1.強制執行確保良好程式設計的規則:

use strict;


2.調用子程式時,養成習慣以「 &子程式名稱 」來呼叫。


3.定義子程式的私用變數,並且可在兩次子程式調用之間保存變數的值:

state $x = 0;




四、輸入與輸出

1.取得使用者輸入:

<STDIN> 或 <>


2.用來調用引數的串列:

@ARGV


3.輸出錯誤訊息,並立刻停止程序:

die "字串";


4.傳送警告訊息,不會停止程序:

warn "字串";


5.自動進行 die 操作:

use autodie;


6.改變預設的輸出檔案代號:

select 檔案代號;


7.字串輸出:

等同於 print 加上換列符號:say "字串";




五、雜湊

1.雜湊與陣列的不同處在於,它是以名稱來找尋相應的值。


2.當你需要將一套資料「對應到」另一套資料時,就應使用雜湊,例如想由 IP 位址找主機名稱。


3.存取雜湊元素:

$hash_name{"key"} = "值";

%hash_name = ("key1" => "值1", .....);

@array_name = %hash_name;


4.keys 和 values 函式:

%hash = ( 'a' => 1);
@k = keys %hash; //印a
@v = values %hash; //印1


5.逐項處理整份雜湊:

while($key, $values) = each %hash){ ...}


6.檢視某個鍵是否存在雜湊之中:

exists $hash_name{"key"};


7.從串列移除你所指定的鍵和相應的值:

delete $hash_name{"key"};




六、目錄操作

1.改變目前的工作目錄:

chdir "/xxx";

若發生錯誤時,系統會自動設定純量變數 $! 的值,因此當出錯時務必檢查 $!。


2.目錄代號:

開啟目錄:opendir $目錄;

讀取內容:readdir $目錄;

關閉目錄:closedir  $目錄;





七、字串與排序

1.找尋子字串:

$str = index($變數, "關鍵字"); //若關鍵字在字串的第一個位置則回傳 0;若無則 -1。

$str = substr("關鍵字", 起始值, 子字串長度);


2.數值排序:

sub by_num { $a <=> $b)

@result = sort by_num @some_numbers;

@numbers = sort { $a <=> $b} @some_numbers;

3.用值排序雜湊:

sub  num{ $num{$a} <=> $num{$b}}





八、智慧型比對與 given-when

1.檢視兩邊的運算元,並自行決定該如何比較它們:

  • %x ~~ %y //是否雜湊鍵完全相同。
  • %x ~~ @y //是否 %x 中至少有一個鍵為 @y 的一個元素。
  • %x ~~ /abc/ //是否至少有一個鍵與樣式相符。
  • 'abc ~~ %x //是否存在 $x{abc} 雜湊鍵。
  • @x ~~ @y //是否兩個陣列完全相同。
  • @x ~~ /abc/ //是否 @x 中至少有一個元素與樣式相符。
  • $x ~~ undef //是否 $x 尚未定義。
  • $x ~~ /abc/ //樣式比對。


2.在所給定的引數滿足某個條件時執行一個程式碼區塊:

given ( ) {
when ()
when ()
default
...}

每個 when 區塊的結尾處都會有 break,但不必鍵入。


3.當有多個項目要測試時,可改編 given-when:

foreach(@x){
....
when()
....}




九、行程管理

1.啟動 Linux 命令:

system '指令';


2.system 會讓 Perl 暫停,並且建立一個子行程來執行所要求的命令。


3.以倒引號截取輸出結果:

$x = `ls -l`; 或 $x = qx(ls -l);




十、Perl 的一些進階技巧

1.捕捉錯誤:

eval{ ... };


2.一旦 eval 遇到錯誤,它會停止整個區塊的執行,並且會繼續執行程式的其餘部分。


3.若 eval 捕捉到錯誤時,會回傳 undef,可以 defined-or 運算符來設定預設值。


4.不用每次發現錯誤時都使用 die 的做法:

use autodie;

沒有留言:

張貼留言