Perl認(rèn)為真值是自明的(self-evident), 表示任何事物的真值都可以計(jì)算。Perl以實(shí)用的方式來(lái)定義真值,即一個(gè)實(shí)體的真值取決于這個(gè)實(shí)體的類型。Perl總是樂(lè)觀的認(rèn)為:這個(gè)世界上真的東西遠(yuǎn)比假的東西多的多。
Perl區(qū)別與任何其他計(jì)算機(jī)語(yǔ)言,Perl是語(yǔ)言學(xué)家創(chuàng)造的,而語(yǔ)言的意思離不開上下文語(yǔ)境,所以Perl中的真值都可以在標(biāo)量(標(biāo)量$與數(shù)組@類似于英文中的單數(shù)與復(fù)數(shù), book 與 books的區(qū)別, 真值在現(xiàn)實(shí)世界中,應(yīng)該就是單數(shù),所以是標(biāo)量)計(jì)算,除此之外,不會(huì)做任何類型的強(qiáng)制轉(zhuǎn)換(比如在Python中int('42')來(lái)將含數(shù)字的字符型轉(zhuǎn)換int類型,在Java中(int)'d'將字符型轉(zhuǎn)為整型)。
對(duì)于標(biāo)量中各種類型的值,規(guī)則如下:
字符型: 除了""和"0",所有字符都是真(true)
數(shù)字型: 除了0外,所有數(shù)字都是true
引用型: 所有引用都為true(所有引用都會(huì)指向有地址的對(duì)象,這絕對(duì)不會(huì)為0,因?yàn)樗隙ㄒ讯x)
未定義: 所有未定義值都是false
下面例子可以很好理解Perl中真、假的概念:
復(fù)制代碼 代碼如下:
0 # 將轉(zhuǎn)換為字符串"0",所以為false
1 # 將轉(zhuǎn)換為字符串"1",所以為true
100 - 100 # 100-100等于0,這將轉(zhuǎn)換為字符串"0",所以為false
0.00 # 等于0,將轉(zhuǎn)換為字符串"0",所以為false
"0" # 字符串"0",所以為false
"" # 這是空串,所以為false
"0.00" # 即不是"",也不是"0",所以為true
"0.00" + 0 # 由+強(qiáng)制轉(zhuǎn)換,計(jì)算結(jié)果為0,所以為false
\$a # 標(biāo)量$a的引用,所以為true,即使$a為false也是如此。
undef() # 是一個(gè)返回未定義值的函數(shù),所以為false