2011-08-04 78 views

回答

5

始終使用警告,尤其上一個-liners。

Perl有沒有真的還是假的命名常量,沒有警告或嚴格啓用「裸詞」(的東西,可能是一個常數或功能,但沒有)被悄悄解釋爲字符串。所以,你在做if("true")if("false"),而且比其他所有字符串"""0"是真實的。

10

如果嚴格運行:

perl -Mstrict -e 'if(true) { print 1 }' 

,你會得到的原因:

Bareword "true" not allowed while "strict subs" in use at -e line 1. 

它被解釋爲字符串"true""false"這是總是如此。常量並不在Perl定義的,但你可以自己做:

use constant { true => 1, false => 0 }; 
if(false) { print 1 } 
8

您正在使用裸字truefalse。光禿禿的話是一件壞事。如果你試試這個:

use strict; 
use warnings; 
if (true){print 1} 

你可能會得到這樣的事情:

Bareword "true" not allowed while "strict subs" in use at - line 3. 
Execution of - aborted due to compilation errors. 

所定義的任何值並不像0被認爲是「真實的」。任何未定義的值或看起來像0(如0"0")的任何值被認爲是「假」。這些值沒有內置關鍵字。你可以只用01(或粘在use constant { true => 1, false => 0};如果你感到困擾。:)

+0

我移植4GL代碼到Perl 5,並有常量幫助。我已經忘記了這些。謝謝。 – octopusgrabbus

相關問題