Perl學習筆記(二)

標量數據

perl的數據類型非常簡單,第一種數據類型稱爲scalar(標量),一般用於表示數字或者字符串。

兩種標量的使用:
一種是標量數據,表示數據的值;一種是標量變量,表示存儲標量數據的容器。

Perl處理數字時使用的是底層C庫,且統一使用雙精度浮點數來存儲和計算數據(雙精度浮點數,使用8字節,共64位來存儲一個浮點數)

整數直接量:就是在源代碼中直接寫成數據內容的形式。

寫法如下:
0
2001
-40
137
61298040283768

最後一數字比較長,Perl中允許你在整數直接量中加入下劃線。將若干位數分開,寫成下面這樣:
61_298_040_283_768
兩種寫法對計算機來說都表示一個數字。

Perl提供乘冪運算符,即兩個**,比如2**3表示2的3次方,結果是8。

字符串:Perl完全支持Unicode,所以在字符串中可以使用任意一個合法的Unicode字符。但由於歷史原因,它不會自動將程序源代碼當作Unicode編碼的文本文件讀入,所以如果想在源代碼中使用過Unicode書寫直接量的話,需要手工加上utf8編譯指令
注:
最好養成習慣始終加上這句
use utf8;

字符串的連接使用.操作符

"hello".“world”		#等同於“helloworld”
"hello"." "."world" #等同於"hello world"

小寫的字母x,此操作符會將其左邊的操作數(也就是要重複的字符串)與它本身重複連接,重複次數則由右邊的操作數(某個數字)指定,例子:

“fred” x 3				#得“fredfredfred”
"barney" x (4+1)		#得"barney" x 5 ,即“barneybarneybarneybarneybarney”
5 x 4.8 				#本質上就是"5" x 4,所以得“5555”
Perl的內置警告信息

從Perl 5.6開始,可以通過編譯指令啓用警告機制
1.

#!/usr/bin/perl
use warnings;

2.也可以在命令行調用程序時使用-w選項啓用警告機制
$ perl -w 1.pl

3.也可以在第一行這樣啓用
#!/usr/bin/perl -w

如果看不明白警告信息說的是什麼,可以利用diagnostics編譯指令,在perldiag文檔中列出每個警告信息的簡短描述和詳盡解釋
use diagnostics;
把這條加進去之後,程序啓動可能會有些慢。(也可以使用命令行的-M選項)

非十進制數字的轉換

可以使用hex()或者oct()函數將字符串轉換爲對應的數字。

hex('DEADBEEF')		#即十進制數字 3_735_928_559
hex('0xDEADBEEF')	#即十進制數字 3_735_928_559
用代碼點創建字符

對於一些特殊字符的輸入,可以使用代碼點(code point),比如

$alef = chr(0x05D0);
$alpha = chr(hex('03B1'));
$omega = chr(0x03C9);

或者已知字符,要取得他的代碼點,可以通過ord()函數轉換:
$code_point = ord('א')

比較 數字 字符串
相等 == eq
不等 != ne
小於 < lt
大於 > gt
小於或等於 <= le
大於或等於 >= ge
  • 注意Perl中的判斷和C語言不同的地方:if和while必須帶花括號
獲取用戶輸入
  • 行輸入操作符<STDIN>
    注意:從<STDIN>讀取的字符串是包含末尾的換行符的。實際應用的時候,我們往往不需要末尾的那個換行符,需要用chomp()操作符去掉。
#!/usr/bin/perl
$line = <STDIN>;
if($line eq "\n")
{
	print "That was just a blank line!\n";
}else{
	print "That line of input was:$line";
}

在這裏插入圖片描述

  • chmop()操作符:去掉字符串末尾的換行符,如果沒有,就啥都不幹。
    chmop()本質上是函數,它的返回值是實際移除的字符數,但這個數字幾乎沒用。

  • 注意:如果字符串後面有兩個以上的換行符,chomp()只去掉最後的那個;如果末尾沒用換行符,就啥也不幹並返回0。

chomp($text = <STDIN>);		#讀取不帶換行符的輸入
#下面是另一種寫法
$text = <STDIN>;
chomp($text);

下面再介紹一個例子:

$food = <STDIN>;
$betty = chomp $food;	#會得到返回值1————我們之前已經知道了

這裏用chomp()的時候沒有加括號,對於函數而言這種括號是可加可不加的,這是Perl的另一項慣例:除非去掉括號會改變表達式的意義,否則括號可以省略。

  • undef值
    undef本身既不是數字也不是字符串,它完全是一種獨立類型的標量值。

可以根據undef作爲數字使用時會被視作爲數字0,構造一個數字累加器,在開始累加前完全不用做任何初始化工作:

#累加一些奇數
$n=1;
while($n<10)
{
	$sum+=$n;
	$n+=2;		準備好下一個奇數
}
print "The total was $sum.\n";

循環開始前$sum的初值是undef,由於我們把undef當成數字用,相當於0,所以累加的結果就是1。同樣的道理,串接字符串的時候也不用刻意的去進行初始化:
$string .= "more text\n";
如果$string的值起初是undef,那麼這個串接操作的結果就好比是空字符串和"more text\n"串接後存入該變量,如果初始值是某個字符串,那麼就和以往一樣,追加新的部分到字符串末尾。

  • defined函數
    爲了判斷某個字符串是否爲undef,可以用defined函數,即如果是undef,該函數就返回假;否則,即使是空字符串,那也是已定義的值,函數返回真
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章