1 簡(jiǎn)單變量
Perl 的 Hello World 是怎么寫(xiě)的呢?請看下面的程序:
#!/usr/bin/perl
print "Hello World"
這個(gè)程序和前面 BASH 的 Hello World 程序幾乎相同,只是第一行換成了 #!/usr/bin/perl ,還有顯示的時(shí)候用的是 print,而不是 echo。有了前面 BASH 基礎和 C 語(yǔ)言的基礎,許多 Perl 的知識可以很容易的就看懂和記住,下面我們就從簡(jiǎn)單變量開(kāi)始。
簡(jiǎn)單變量是標量,是 Perl 處理的最簡(jiǎn)單的數據類(lèi)型。標量可以是數字(如2,3或2.5e6), 也可以是字符串。Perl 中的標量變量以美元符號 "$" 和一個(gè)字母開(kāi)始,后面可以跟字母、數字和下劃線(xiàn),Perl 的變量區分大小寫(xiě),因此 $a 和 $A 是代表不同的變量。和 BASH 中不同的是 Perl 語(yǔ)言中的變量即使是在最初賦值的時(shí)候也必須在變量前面加上 "$" 符號,而且 Perl 不要求 "=" 左右必須沒(méi)有空格。
雖然 Perl 中和 BASH 一樣,沒(méi)有變量類(lèi)型的概念,我們還是可以把簡(jiǎn)單變量分為數值型和字符串型來(lái)理解。在賦值時(shí),如果是賦值成字符串,則需要在字符串兩邊加上雙引號(或單引號);如果是數值則就不用了,而且 Perl 中還可以接受8/16(以0開(kāi)頭/以0x或0X開(kāi)頭)進(jìn)制的整數,還可以接受如 2.5,-6.3e5,-2.3-e6 這樣的浮點(diǎn)數。關(guān)于簡(jiǎn)單變量舉例如下:
$a=23;
$a = "hello";
$a = 010;(表示十進(jìn)制的 8)
$a = 0x10;
$a = 0X10;
和 C 語(yǔ)言類(lèi)似,在雙引號之中可以用反斜杠表示一些特殊轉義字符,見(jiàn)下表:
結 構 含 義
\n 換行
\r 回車(chē)
\t 水平置表符
\f 換頁(yè)符
\b 退格
\v 垂直置表符
\a 響鈴
\e Esc
\007 任一八進(jìn)制ASCII值(這里007表示bell)
\x7f 任一十六進(jìn)制ASCII值
\cC 任一“控制”字符
\\ 反斜杠
\" 雙引號
\l 下一字母小寫(xiě)
\L 以后所有字母小寫(xiě)直到\E
\u 下一字母大寫(xiě)
\U 以后所有字母大寫(xiě)直到\E
\E 結束\L和\U
另外在 Perl 語(yǔ)言里,我們常會(huì )看到 my 這樣的變量定義,如:
my $a = "local var";
這表示 $a 是一個(gè)程序塊的局部變量。
2 數組
數組是標量數據的有序列表。數組可以含從 0 個(gè)元素大小 直到 你計算機內存可以支持的大小。數組用括號內以逗號分隔的一系列元素來(lái)表示。如:
@a=(1,2,3,4,5)
@a=("aka",1974,173.5)
在 Perl 中對數組變量和前面的簡(jiǎn)單變量的存儲是在不同的空間中,對數組的引用需要在變量前加 "@" 符號。
數組的賦值由下面幾種用法需要注意:
@a=(1,2,3); # 初始化一個(gè)整數數組。
$a=@a; # 這里表示將數組 @a 的長(cháng)度賦給 $a,此時(shí) $a 和 @a 不是一個(gè)變量,他們不在一個(gè)存儲空間里,引用時(shí)不會(huì )發(fā)生混淆。
($a, $b, $c)=(1,2,3); # 這里表示將 1 賦給 $a;2 賦給 $b;3 賦給 $c;
@a=("a","b","c"); # 初始化一個(gè)字符串數組。
@b=@a; # 表示把數組 @a 拷貝一份給數組 @b,@a 與 @b 不享有共同的存儲空間,他們彼此分離。
@c=(@a,@b); # 表示數組 @c 擁有 @a 和 @b 的所有元素,仍然是一維數組,而不是發(fā)生了嵌套。
($a,@b)=@a; # 表示變量 $a 等于數組 @a 的第一個(gè)元素,@b 拷貝了 @a 的剩余元素。
@a=(); # 表示產(chǎn)生或清空一個(gè)數組。
($a)=@b; 變量 $a 等于數組 @b 的第一個(gè)元素的值。
@b[i] 引用數組 @b 的第 i 個(gè)元素。
$b[i] 如果 b 表示一個(gè)數組的話(huà),其含義同上。
$a[i,j]=[x,y] 將數組 @a 的第 i 和第 j 個(gè)元素賦值為 x 和 y。
@a[i,j]=@a[j,i] 將數組 @a 的第 i 和第 j 個(gè)元素的值互相交換。
3 關(guān)聯(lián)數組
關(guān)聯(lián)數組是 Perl 語(yǔ)言中特有的一種數據結構,是一個(gè)功能強大的數組,他與普通數組的不同在于關(guān)聯(lián)數組不是通過(guò)整數下標來(lái)索引,而是通過(guò)“鍵值”進(jìn)行索引。使用關(guān)聯(lián)數組需要在變量前面加上 "%" 號,關(guān)聯(lián)數組的格式如:
ARRAY=(key1,value1,key2,value2,key3,value3);
上面每個(gè) key 都對應著(zhù)一個(gè) value。關(guān)聯(lián)數組是存在在另外一個(gè)存儲空間中,不和簡(jiǎn)單變量以及數組相混淆。
對關(guān)聯(lián)數組的操作有如下規則:
在關(guān)聯(lián)數組中增加、更改一對數據:ARRAY={key}=value; 在關(guān)聯(lián)數組ARRAY中加上一對 key-value,要在關(guān)聯(lián)數組名稱(chēng)前加上 $ 號,而且 key 的名稱(chēng)要在 {} 符號之間,最后再指定 key 所對應的 value 值。如果在這個(gè)關(guān)聯(lián)數組中已經(jīng)有這個(gè) key 了.就會(huì )更改這個(gè) key 所對應的 value 。
keys(%array) 操作符可生成由關(guān)聯(lián)數組 %array 中的所有當前關(guān)鍵字組成的列表。即返回奇數號元素(第1,3,5,7...個(gè))的列表。
values(%array) 操作符返回由關(guān)聯(lián)數組 %array 中所有當前值組成的列表,即返回偶數個(gè)列表。
echo(%array) 操作符返回由 關(guān)鍵字/值對 構成的元素對列表。對同一數組再進(jìn)行此操作時(shí)返回下一對值直至結束。若沒(méi)有更多的對時(shí),echo() 返回空表。 (這在打印全部列表中很有用)
刪除一對在關(guān)聯(lián)數組中的數據:delete $ARRAY{key}; delete 是 Perl 所提供的函數,作用是刪除關(guān)聯(lián)數組中的一個(gè) key 以及這個(gè) key 所對應的 value。使用方法是在 delete 函數之后,指定關(guān)聯(lián)數組中要刪除的 key 名稱(chēng)。
下面是一些關(guān)聯(lián)數組操作的例子:
%fred=(one,"aka",two,"free"); $a=$fred{one}; # $a等于"aka"
$b=$fred{two}; # $b等于"free"
$fred{two}="yes"; # %fred=(one,"aka",two,"yes")
@index=keys(%fred); # @index=(one,two)
@content=values(%fred); # @content=("aka","yes")
($index,$content)=echo(%fred); # 此時(shí) $index 的值為 one,$content 的值為 "aka",再執行一次 $index 為值為 two,$name 的值為 "yes"
@a=%fred; # 將關(guān)聯(lián)數組 fred 指定給數組 a,這時(shí) @a=(one,"aka",two,"yes")
%b=@a; # 將數組 a 指定給關(guān)聯(lián)數組 b,這時(shí) %b=(one,"aka",two,"yes")
delete $fred{one}; # 將關(guān)聯(lián)數組中 key 值為 one 的一對 key-value 刪除,這時(shí) %fred=(two,"yes")
%x=(); # 把 %x 關(guān)聯(lián)數組置空
4 各種運算符號匯總
賦值(Assignment)運算符
算術(shù)(Arithmetic)運算符
數值(Numeric Values)關(guān)系運算符
字符串(String Values)關(guān)系運算符
邏輯(Logical)運算
其它常用的運算符
常用的文件數據(File Test)運算符
賦值(Assignment)運算符
符號 范例 說(shuō)明
= $x=$y; 將$x的值指派給$y
+= $x+=$y;
$x=$x+$y; 將$x加$y之后再指派給$x
-= $x-=$y;
$x=$x-$y; 將$x減$y之后再指派給$x
*= $x*=$y;
$x=$x*$y; 將$x乘$y之后再指派給$x
/= $x/=$y;
$x=$x/$y; 求出$x除以$y之后的商數,再指派給$x
**= $x**=$y;
$x=$x**$y; 將$x乘上$y次方之后再指派給$x
%= $x%=$y;
$x=$x%$y; 求出$x除以$y的余數以后,再指派給$x
.= $str1.=$str2;
$str1=$str1.$str2; 將$str1這個(gè)字符串再加上$str2這個(gè)字符串之后,再指派給$str1這個(gè)字符串
x= $strx=$y;
$str=$strx$y; 重復$str字符串$y次,并反結果指派給str這個(gè)字符串
算術(shù)(Arithmetic)運算符
符號 范例 說(shuō)明
+ $z=$x+$y 將$x和$y相加之后,再將結果指派給$z
- $z=$x-$y 將$x減掉$y之后,再將結果指派給$z
* $z=$x*$y 將$x和$y相乘之后,再將結果指派給$z
/ $z=$x/$y 將$x除以$y之后,再將商數指派給$z
% $z=$x%$y 將$x除以$y之后,再將余數指派給$z
** $z=$x**$y 將$x乘以$y之后,再將結果指派給$z
++ $x++;++$x; 如同$x=$x++1;將$x加一以后再將結果指派給$x
-- $x--;--$x; 如同$x=$x-1;將$x減一以后再將結果指派給$x
. $z=$x.$y; 將$x字符串和$y字符串連接之后,再將結果指派給$z