Learning Perl 第二章 標量數據 標量是Perl裏最簡單的一種數據類型,要麼是數字,要麼是字符組成的序列。對於Perl來說,這二者能夠在內部轉換。 能夠用操做符對標量進行操做,產生的結果也是標量。 在Perl內部,老是按照雙精度浮點數的要求來保存數字並進行運算的。Perl並不存在整型變量。 浮點數直接量 直接量值某個數字在Perl源代碼中的寫法。 小數點和前置的正負號都是可選的,數字前面加上用"e"表示的指數表示法。 非十進制的整數直接量 Perl容許十進制之外的其餘進制來表示數字。八進制直接量以O開頭,十六進制以0x開頭,二進制變量以0b開頭。 非十進制直接量多了會影響閱讀。Perl容許在這些直接量中使用下劃線。 字符串 字符串能夠是任意字符組成,長度沒有限制,由於字符串能夠包含任意數據,因此能夠用它來建立,掃描或操控二進制數據。 Perl徹底支持unicode,若是在源代碼中使用Unicode書寫直接量,要手動加上utf-8編譯指令: use utf-8; 單引號的字符串直接量 要表示反斜線自己,須要在反斜線前面加上一個反斜線字符表示轉義;要表示單引號自己時,也須要在單引號前面加上反斜線字符表示轉義。 雙引號內的字符串直接量 能夠轉義許多控制字符,或者用八進制或十六進制寫法表示任何字符。 雙引括號的另外一特性稱爲變量內插 字符串操做符 字符串能夠用.號鏈接起來,鏈接運算符必須顯式使用。 字符串重複操做符,小寫字母x。並不知足交換律。 重複次數在使用前先取整,小於1時會生成空字符串。 數字與字符串間的自動轉換 Perl會根據須要,自動在數字和字符串間進行類型轉換。 Perl內置警告信息 $perl -w program #!/usr/bin/perl -w use diagnostics; 能夠顯示更詳細的警告信息。可是加載警告信息到內存會比較慢。 能夠perl -wdiagnostics ./program應用。 標量變量 標量變量僅僅存儲一個值的變量。標量變量的名稱以美圓符號開頭,稱爲魔符(sigil),標識符區分大小寫。 $的意思就是取標量。 標量的賦值 雙目賦值操做符 print輸出結果 字符串中的標量變量內插 藉助代碼建立字符 chr()函數轉換代碼點爲字符;ord()轉換字符爲代碼點。 比較操做符 Perl比較操做符:<,<=,==,>=,!=。這些操做符返回值爲true or flase。 能夠用eq, ne, lt, gt, le, ge if控制結構 if () {...;} if () {...;} else {...;} 獲取用戶輸入 行輸入操做符<STDIN>,放在程序中但願返回標量值的位置,Perl就會從標準輸入讀取一行文本。 chomp操做符 chomp()操做符做用於單個變量,去掉字符串末尾的換行符。 chomp($text = <STDIN>); chomp()函數實際的返回值是移除的字符數。 while控制結構 $count = 0; while ($count < 10) { $count += 2; print "count is now $count.\n" } count is now 2. count is now 4. count is now 6. count is now 8. count is now 10. undef值 undef既不是數字也不是字符串,徹底是另一種類型的標量值。 $n = 1; while ($n <= 5) { $count += $n; $n++; } print "the total is $count.\n"; the total is 15. 程序開始時,$count的初始值的undef,可是並不影響程序的運行。 複製某個undef變量到另外一個變量沒有問題,可是print輸出會引起警告信息。 defined函數 判斷某個字符串是undef而不是空字符串,可使用defined函數,若是undef,則函數返回假,不然返回真。 課後習題 1. 寫一個程序,計算半徑爲12.5時,圓的周長爲多少。 2. 修改上題程序,讓用戶鍵入半徑的長度。 3. 修改上題程序,用戶輸入半徑小於0時,輸出0,而不是負數。 4. 寫一個程序,提示用戶鍵入兩個數字,而後輸出二者的乘積。 5. 寫一個程序,提示用戶輸入一個字符串和一個數字,而後以數字爲重複次數,連續輸出字符串。 答案: 1. $pi = 3.1415926; $cric = 2 * $pi * 12.5; print "The circumference of a circle of radius 12.5 is $cric.\n"; 2. $pi = 3.1415926; print "What is the radius?\n"; chomp($radius = <STDIN>); $cric = 2 * $pi * $radius; print "The circumference of a circle of radius 12.5 is $cric.\n"; 3. $pi = 3.1415926; print "What is the radius?\n"; chomp($radius = <STDIN>); $cric = 2 * $pi * $radius; if ($radius < 0) { $cric = 0; } print "The circumference of a circle of radius 12.5 is $cric.\n"; 4. print "Enter a string: "; $str = <STDIN>; print "Enter a number: "; chomp($num = <STDIN>); $result = $str x $num; print "The result is \n$result.";