就算寫的是整數,在內部也會轉換成等效的浮點數類型保存。shell
但在perl內部,有些運算會將浮點數轉換成整型進行,並且也有integer編譯器能夠強制編譯成整型。函數
有3種方式:操作系統
123 0123 61_123_234
這裏使用下劃線(_)代替逗號表示千分位,由於perl中逗號有特殊意義。code
+ - * / % **
**
的優先級在這裏最高。文檔
取模時,先兩個數取整,再取模。例如5.2 % 2.1
等價於5 % 2
。字符串
多個取冪符號時,**
的優先級是從右向左進行的。編譯器
3 ** 4 ** 2 # 3 ** (4 ** 2) = 3的16次方
perl對待單雙引號的方式和shell有點相似。編譯
\n
再也不是換行),其它全都看成字面符號(單引號自身除外)\n
,\t
...)、變量替換都容許'malong' 'malong\'s girl friend' 'malong\n' # 這裏沒有換行 "malong\n" # 換行了 'malong girl friend' # 換行了,由於這裏的換行是字面符號,不是\n 'malong\\n' # 換行了 "malong $var" # 變量替換
有如下反斜線序列(轉義序列):變量
\n \r \t \l # 將下個字母轉換爲小寫 \L # 將後面的多個字母都轉換爲小寫,直到遇到\E \u # 將下個字母轉換爲大寫 \U # 將後面的多個字母都轉換爲大寫,直到遇到\E \Q # 和\E之間的全部字符都強制看成字面符號 \E # \L、\U和\Q的結束符號
但即便沒有"\E",到了字符串結束的地方,轉義序列就會結束。例如:date
print "\Uabc"."xyz\n" # 輸出ABCxyz print "abc"."x\Eyz\n" # 輸出abcxyz
反引號內的字符串會交給shell執行。這是和操做系統交互的一種方式,支持操做系統的管道、重定向等特性。另外一種方式是使用system函數。
$mydatetime = `date +"%F %T"` print $mydatetime,"\n";
默認狀況下,反引號內的內容會被perl先按照雙引號的方式進行解析,而後傳遞給操做系統的shell執行。因此,當有變量替換時會進行變量替換:
$name="malongshuai"; $msg=`echo $name`; # 替換爲echo malongshuai,而後交給shell print $msg;
若是不想先被perl解析,可使用qx和單引號結合的方式,關於qx,見下文。
$name="malongshuai"; $msg=qx'echo ha $name hei'; # 不會替換爲malongshuai,而是將$name替換爲空交給shell print $msg;
q(hello world) # 等價於'hello world' qq(hello world) # 等價於"hello world" qx(echo hello world) # 等價於`echo hello world`
上面的括號能夠替換爲其它符號,只要先後能配對(特指括號類)或者一致便可:
qq{ hello } qq! hello ! qq# hello # qq% hello %
字符串鏈接使用點(.)。
下面是等價的:
abc.cde abccde
字符串重複使用小寫字母"x",後跟一個重複倍數。若是倍數是一個小數,如3.2,則會取整。若是倍數小於1,則取整爲0,因此倍數爲0,返回空。
"abc" x 3 "abc" x 3.2
都將輸出"abcabcabc"。
"abc" x 0.4 # 返回空
"x"符號左邊會強制轉換爲字符串。
03 x 3 # 返回333 "03" x 3 # 返回030303 3 x 3 # 返回333 3.2 x 3 # 返回3.23.23.2
何時轉換,以及向哪一個方向轉換,取決於操做符。
例如,算數運算符(+-*/
等)須要的是數值,會強制轉換爲數值。"."操做符須要的是字符串,會強制轉換爲字符串。
"0333" + 22 # 返回355 "033".22 # 返回03322 033.22 # 返回2722,033表示8進制,轉換爲十進制爲27(3*8+3)
perl變態的一個地方,數值開頭的字符串也能夠強制轉換爲字符串。但只能轉換數值開頭(容許前導空白)的字符串。
"12abc" * 3 # 36 "abc12" * 4 # 0 " 12abc" * 3 # 36
兩種類型的操做符一塊兒用的時候,會按照優先級進行運算:
"abc".5*3 # 返回abc15,乘法先運算 "abc".5 + 3 # 返回3,"."先運算 "abc".(5+3) # 返回abc8
perl中也支持heredoc,所謂heredoc,即表示將後面的內容看成文檔。既然是文檔,就須要有文檔起始符和文檔結束符,分別標識文檔從哪裏起始,到哪裏結束。
通常來講,全部支持heredoc的語言,文檔起始符和文檔結束符都必須相同(通常使用EOF或eof做爲起始符和結束符),且結束符必須單獨佔行且頂格書寫。
perl中支持的heredoc格式以下,以print爲例:
print <<EOF; line1 line2 line3 EOF
perl的heredoc還有本身的特性,能夠爲起始符加上單引號和雙引號以及其它符號。加單雙引號後的效果和通常單引號、雙引號的能力是同樣的:
`
,則將字符串放進shell環境執行加單雙引號:
$name="malongshuai"; print <<'EOF'; haha \$name # 反斜線轉義功能失效 $name # 變量沒法替換 EOF print <<"EOF"; haha \$name # 反斜線成功轉義 $name # 變量成功替換 EOF
加反引號:
print <<`EOF`; date +"%F %T" EOF
能夠將heredoc直接賦值給變量:
$msg = <<EOF; HELLO WORLD EOF print $msg; # $msg不要加換行符,由於$msg是一個heredoc,自帶換行符