
> 只要不會(huì)因?yàn)槟玫衾ㄌ?hào)而改變?cè)敢?,括?hào)就是可省略的。
不同語(yǔ)言的設(shè)計(jì)邏輯確實(shí)有差異,需要拋開(kāi)C的思維,打開(kāi)Perl的思路。
打開(kāi)警告
undef
狀態(tài)碼
退出值0代表正常,非零退出代表異常。
默認(rèn)變量
$!只能捕獲系統(tǒng)調(diào)用相關(guān)錯(cuò)誤。
環(huán)境變量
比如PATH
在程序開(kāi)始時(shí)候,%ENV會(huì)保留從父進(jìn)程繼承而來(lái)的設(shè)定值。修改該值會(huì)被新進(jìn)程繼承。但修改從父進(jìn)程繼承的環(huán)境變量并不能影響shell或者其他父進(jìn)程。
數(shù)組越界不奔潰(未初始化的為undef)
雙引號(hào)會(huì)把變量替換
單引號(hào)除了單引號(hào)和反斜線字符外,其他字符都代表它們自己( 表示一個(gè)反斜線和n)
可能splice看起來(lái)不起眼,但在其他語(yǔ)言中要實(shí)現(xiàn)相同功能并不輕松。許多人為了達(dá)到相同目的,使用各種復(fù)雜概念和技術(shù),比如鏈表什么的,但這無(wú)疑是把程序員的時(shí)間浪費(fèi)在低層次的數(shù)據(jù)處理上,既不合理也不高明。
數(shù)組和普通變量可以共用一個(gè)名字!所以取名可以參考前綴
@可以獲得整個(gè)數(shù)組
chomp函數(shù)可以去掉一行字符串的最后一個(gè)換行符(如果有的話)
foreach中的控制變量(item)在循環(huán)中并不是數(shù)組變量的拷貝,而是變量自身!因此在循環(huán)中修改了控制變量就會(huì)修改數(shù)組本身!同時(shí),控制變量作用域是僅限于foreach,與前面定義的不沖突。
sort是按字符在計(jì)算機(jī)內(nèi)部編碼順序排序的!所以如果要排序需要注意排序結(jié)果,比如要對(duì)數(shù)字排序,那么使用sort可能不對(duì)
上下文
標(biāo)量上下文和列表上下文。同一個(gè)表達(dá)式在不同的地方會(huì)有不同的意義。
比如
@people = sort @data
$number =42 + @data
一個(gè)是對(duì)data排序,一個(gè)是計(jì)算42+data這個(gè)數(shù)組的元素個(gè)數(shù)!
可以使用scalar強(qiáng)制指定標(biāo)量上下文
常量,空字符串
可以使用readonly來(lái)描述
多行字符串
如果有字符串要多行,應(yīng)該在每個(gè)換行符之后斷開(kāi),再使用“.”連接起來(lái)
如果內(nèi)容太多,可以用heredoc
qw
不要在qw操作符內(nèi)誤用逗號(hào),它會(huì)被當(dāng)做是字符串的一部分。Perl會(huì)用空格分割qw內(nèi)字串。
第十六章 進(jìn)程管理
可以使用system或者exec
system會(huì)創(chuàng)建子進(jìn)程,子進(jìn)程會(huì)在perl睡眠期間執(zhí)行(也可以創(chuàng)造后臺(tái)進(jìn)程)
exec會(huì)使Perl進(jìn)程自己去執(zhí)行任務(wù)。這類似子程序調(diào)用與"goto"的差別。
當(dāng)運(yùn)行到exec時(shí)候,Perl執(zhí)行對(duì)應(yīng)命令,此后就沒(méi)有Perl進(jìn)程了,這樣在命令結(jié)束后就沒(méi)有Perl進(jìn)程在等待??梢杂糜谑褂肞erl給對(duì)應(yīng)命令設(shè)置啟動(dòng)的環(huán)境變量。(學(xué)習(xí)Perl 276頁(yè))
一旦要執(zhí)行的命令啟動(dòng)后Perl便退出,后面的代碼也都無(wú)法運(yùn)行,但如果命令啟動(dòng)失敗,后續(xù)的錯(cuò)誤捕獲命令還是可以運(yùn)行的。
可以使用反引號(hào)``來(lái)代替單或雙引號(hào),用來(lái)捕捉命令的輸出。
使用system啟動(dòng)子進(jìn)程時(shí)候可以向里面?zhèn)鬟f參數(shù),如果需要傳入的參數(shù)是給命令用,那么就需要注意是否是要把參數(shù)內(nèi)插。
system 'ls $HOME'
注意使用單引號(hào)與雙引號(hào)是有差異的。