
> 只要不會(huì)因?yàn)槟玫衾ㄌ柖淖冊敢?,括號就是可省略的?/p>
不同語言的設(shè)計(jì)邏輯確實(shí)有差異,需要拋開C的思維,打開Perl的思路。
打開警告
undef
狀態(tài)碼
退出值0代表正常,非零退出代表異常。
默認(rèn)變量
$!只能捕獲系統(tǒng)調(diào)用相關(guān)錯(cuò)誤。
環(huán)境變量
比如PATH
在程序開始時(shí)候,%ENV會(huì)保留從父進(jìn)程繼承而來的設(shè)定值。修改該值會(huì)被新進(jìn)程繼承。但修改從父進(jìn)程繼承的環(huán)境變量并不能影響shell或者其他父進(jìn)程。
數(shù)組越界不奔潰(未初始化的為undef)
雙引號會(huì)把變量替換
單引號除了單引號和反斜線字符外,其他字符都代表它們自己( 表示一個(gè)反斜線和n)
可能splice看起來不起眼,但在其他語言中要實(shí)現(xiàn)相同功能并不輕松。許多人為了達(dá)到相同目的,使用各種復(fù)雜概念和技術(shù),比如鏈表什么的,但這無疑是把程序員的時(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é)果,比如要對數(shù)字排序,那么使用sort可能不對
上下文
標(biāo)量上下文和列表上下文。同一個(gè)表達(dá)式在不同的地方會(huì)有不同的意義。
比如
@people = sort @data
$number =42 + @data
一個(gè)是對data排序,一個(gè)是計(jì)算42+data這個(gè)數(shù)組的元素個(gè)數(shù)!
可以使用scalar強(qiáng)制指定標(biāo)量上下文
常量,空字符串
可以使用readonly來描述
多行字符串
如果有字符串要多行,應(yīng)該在每個(gè)換行符之后斷開,再使用“.”連接起來
如果內(nèi)容太多,可以用heredoc
qw
不要在qw操作符內(nèi)誤用逗號,它會(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í)行對應(yīng)命令,此后就沒有Perl進(jìn)程了,這樣在命令結(jié)束后就沒有Perl進(jìn)程在等待。可以用于使用Perl給對應(yīng)命令設(shè)置啟動(dòng)的環(huán)境變量。(學(xué)習(xí)Perl 276頁)
一旦要執(zhí)行的命令啟動(dòng)后Perl便退出,后面的代碼也都無法運(yùn)行,但如果命令啟動(dòng)失敗,后續(xù)的錯(cuò)誤捕獲命令還是可以運(yùn)行的。
可以使用反引號``來代替單或雙引號,用來捕捉命令的輸出。
使用system啟動(dòng)子進(jìn)程時(shí)候可以向里面?zhèn)鬟f參數(shù),如果需要傳入的參數(shù)是給命令用,那么就需要注意是否是要把參數(shù)內(nèi)插。
system 'ls $HOME'
注意使用單引號與雙引號是有差異的。