這些主要是從 "小駱駝" 書上粘貼或者摘抄出來的, 我的認爲須要記的語法知識linux
"在某些狀況下, 你可能須要在一臺機器上寫程序, 再傳送到另外一臺機器上運行.這時候, 請使用"文本模式(text mode)" 或者"ASCII模式(ASCIImode)". 記住, 千萬不能是"二進制模式(binary mode)"即使是文本文件, 不一樣的系統對待換行符的方式也有所不一樣, 因此碰到沒法理解的換行符,某些老舊的Perl還可能中斷運行"c++
"通常來講, 程序能夠以任何文件名保存.Perl程序並不須要用什麼特殊的文件名或者擴展名命名,甚至能不用擴展名就最好保護用擴展名 "編程
"linux上應該修改文件屬性使之變成可執行的 chmod a+x XXX(文件名)"windows
"有些函數須要寫上版本號, 以下:asp.net
#!/usr/bin/perl函數
use 5.018 #這是我目前的版本 版本號後面必須是3位小數google
say "Hello World"; #這時候say函數就能用了"編碼
" # <-這個符號是註釋符號, perl中沒有塊註釋"spa
"在Unix系統裏, 若是文本文件開頭的最前面兩個字符時#!, 那麼最後跟着的就是用來執行這個文件的程序路徑, 在windows上沒用,在linux上須要說明。在windows上寫了,也是能夠的.".net
"Perl程序並不須要變量聲明的部分"
"直接量是指某個數字在Perl源代碼中的寫法, 直接量並不是運算結果, 也並非I/O操做的結果,它只是直接鍵入程序源代碼中的數據"
"在Perl內部,則老是按"雙精度浮點數"的要求來保存數字並進行運算的,也就是說,Perl內部並不存在整數值---程序中用到的整形常亮會被轉換成等效的浮點數值"
"perl容許用戶在直接量中插入下劃線"_" 如 61285158231521你可能讀着很費勁 可是你能夠這麼寫612_8515_8231_521 這兩種寫法都表示同一種數字 "
"Perl中一樣可使用八進制、十六進制來表示整型常量,除了8、十六進制外,還有二進制,八進制的常量使用0(零)開頭,十六進制以0x開頭,二進制以0b開頭,例如:
"
"2**3表示2的3次方 = 8, 取模操做符先取整而後再求餘,因此10.5%3.2和10%3的計算結果是同樣的"
"字符串就是一個字符序列, 最短的字符串不包括任何字符串是個空串, 最長的字符串沒有任何限制, 能夠填滿整個內存"
"和c or c++不一樣, 空字符NULL在Perl裏並無什麼特殊的意義, Perl會另行記住字符串的長度, 而不是用空字符串來表示字符串的結尾"
"Perl徹底支持Unicode,可是它不會自動將程序源代碼當作Unicode編碼的文本文件讀入, 因此若是你想要在源代碼中使用Unicode書寫直接量的話, 得手工加上utf8編譯指令 use utf8 (這是個好習慣)"
"單引號內的字符串直接量指的是一對單引號圈引的一串字符, 先後兩個單引號並不屬於字符串的內容, 它們只是用來讓Perl識別字符串的開頭與結尾, 除了單引號和反斜線字符外, 單引號內全部字符都表明他們本身, 要表示反斜線字符自己, 須要在這個反斜線字符前再加一個反斜線字符表示轉義, 表示單引號自己也要轉義, 以下
'hello\n' #這裏不表示換行 表示hello後面接着反斜線和字母n
'hello
there' #這裏hello 換行符 there 總共11個字符 (換行了)
'\'\\' #單引號緊接着反斜線總共2個字符
"
"對於雙引號字符串常量同單引號字符串常量惟一不一樣的是可使用轉義字符,例如前面的\n在雙引號字符串常量中表示換行符。轉義字符以下:
"
"在Perl中能夠用 . 來鏈接兩個字符串 如 "hello" . ' ' . "World!" # 等同於"Hello World!" "
" 還有個特性就是字符串重複操做符,例如:"fred" x 3 # 獲得"fredfredfred" ""在Perl中,Perl會根據須要在字符串和數字之間進行類型轉換,轉換的規則取決於操做符,若是操做符的對象是數字,那麼Perl就會將它看成數字,若是操做符的對象是字符串時,則將它看成字符串,例如,"12" * "3"的結果爲36,"12fred34" * "3"的結果也爲36,Perl會忽略其中的非數字部分,特殊狀況下不包含數字的字符串會被轉換爲零("fred"會被看成數字零來使用)。一樣,在須要字符串的時候,數字會被轉換爲字符串來使用,"Z" . 5 * 7等同於"z" . 35得"Z35"。這些轉換都是自動完成的,在平時編程注意一下就是了。"
"開啓警告功能 use warnings, 也能夠在命令行上使用-w選項對要運行的程序開啓警告功能 perl -w xxx"
"若是看不懂某個警告信息, 能夠利用diagnostics這個編譯命令報告更爲詳盡的問題描述, 在perldiag文檔中列有簡要警告信息和詳細診斷說明, 改文檔是理解diagnosticd輸出信息的最佳參考 use diagnostics"
"變量, 就是存儲一個或者多個值得容器的名稱, 而標量變量, 就是單單存儲一個值得變量"
"標量變量存儲的是單個標量值, 標量變量的名稱以美圓符號開頭, 這個符號也稱爲魔符, 而後是變量的Perl標識符:由一個字母或者下劃線開頭, 區分大小寫, 不限於ASCII字符爲變量 如 $name $的意思是"取單個東西"或者"取標量" "
"Perl裏面咱們能夠用一對花括號將變量名圍起來以免歧義, 如 print "fred ate $n ${what}s.\n" "
"數值與字符串的比較操做符
比較 數字 字符串
相等 == eq
不等 != ne
小於 < lt
大於 > gt
小於等於 <= le
大於等於 >= ge
"
"字符串'0'跟數字0是同一個標量值, 因此Perl會將他們一視同仁, 也就是說, 字符串'0'是惟一被當成假的非空字符串"
獲取用戶輸入
只要把<STDIN>放在程序中但願返回標量值得位置上, Perl就會從標準輸入讀取一行文本.
由<STDIN>返回的字符串通常在末尾都會帶有換行符, 因此經過下面這段代碼, 咱們能夠看到實際發生的狀況:
$line = <STDIN>;
if($line eq "\n")
{
print "that was just a blank line!\n";
}else
{print "that line of input was : $line";}
不過實際編寫代碼時, 不多須要保留末尾換行符, 因此人們經常會用chomp()操做符去掉它
chomp()最多見的用法就是連用: 如:
chomp($text = <STDIN>); #讀入文字, 略過最後的換行符
$text = <STDIN>; #作上面語句一樣的事
chomp($text); #卻分紅兩步
chomp()本質是函數, 而做爲一個函數, 它就有本身的返回值. chomp()函數的返回值是實際移除的字符串. 這個數字幾乎沒有用處, 若是字符串後面有兩個以上的換行符, chomp()僅僅刪除已個; 若是結尾處沒有換行符, 它什麼也不作, 直接返回零.
undef值
若是還沒賦值就用到了某個標量變量, 不會發生什麼大不了的事, 也絕對不會讓程序終止運行. 在首次賦值前, 變量的初始值就是特殊的undef值, 它在Perl裏的意思僅僅是: 這裏空無一物, 若是你想把這個"空無一物"當成數字使用, 他就會表現的像零, 若果當成字符串使用, 他就會表現的像空字符串, 但undef既不是數字也不是zfc, 他徹底是另外一種類型的標量值
當讀到文件結尾時, 他就會返回undef來表示這個情況
defined函數
要判斷某個字符串是undef而不是空字符串, 可使用defined函數, 若是是undef, 該函數返回假, 不然返回真:
$madonna = <STDIN>
if(defined($madonna) )
{
print "the input was $madonna";
}else
{
print "No input available!\n";
}
這裏出現了一個問題:
代碼以下:
1 #! /usr/bin/perl 2 3 chomp($madonne = <STDIN>); 4 if(defined($madonne) ) 5 { 6 print "中文$madonne\n"; 7 }else 8 { 9 print "NULL"; 10 }
代碼很簡單可是有個問題,在window環境下cmd是默認是gbk編碼,因此悲催的事來了,假如說我輸入的是中文字符串那麼。。。
如圖所示,出現亂碼了。。因而 在代碼中添加了一行 use utf8;因而 仍然顯示亂碼
在百度google之後。。。找到了這麼一篇資料
http://blog.useasp.net/archive/2012/04/24/how_to_use_UTF8_encoding_in_Windows_CMD.aspx
結果 沒!有!辦!法!輸!入!中!文! 程序裏面的字符串卻是顯示正常
如今真心不知道怎麼辦了。。。。
唉