除非你一直生活在山洞里,下面的语句你应该非常明白:
第一个语句中表明在I'll go之前"Peter goes"和"Paul goes"都要为真。因此AND代表一个事物只有在两个部分都为真时才为全真(I'll go)。
第二个语句表明如果有一个部分为真,则I'll go就为全真,这就是OR所代表的意思。感谢你,George Boole,让我们一遍又一遍地学这些东西。
但是看下面:
是不是只要Peter去我就会去?让我们引进一个优先规则来确定一下。我们说AND比OR更加重要(具有更高的优先级)。Perl中就是这样。这样我们就会先考虑AND部分而后是OR部分。结论是:在这个规则下,如果Peter去我就去,或者如果Paul和Mary都去我就去,如果没有人去我就不会去。这对于程序员来说并不新鲜。但是Perl中的问题是:Perl中有多于一个的AND/OR对遵守上面的规则。当你将他们混合起来,特别是与其他句法相结合时,就会出现奇怪的结果。你对Perl句法的信任将会受到打击。让我们来看一看会发生什么。
Perl中的一个特点是if声明的方式是可以不同的。
if ( $a eq $b or $a = 0 ) { $c = $a && $b;
}
$c = $a && $b if ($a eq $b or $a = 0);
$c = $a && $b if $a eq $b or $a = 0;
在上面你可以看到AND和OR关键词(&& and or)。问题从第二行开始,新的Perl程序员不会希望if来结束一个声明。在Perl中可以:if被称作“声明修正器”。这里第二行与第一行是相同的,它由于个人喜好原因而被写成不同的形式。第三行则更加的不常见。插入语在Perl中经常是可选择的,在第三行,他们不见了。这些插入语对于阅读者是一个提示,没有他们,代码将会变得不清楚。这就是为什么有人将Perl说成是一种“只写”型语言而他从来“不读取”。其实,这是由于程序人员的个人风格选择而不是语言本身的原因。
如果你把这三行代码放在Perl的语法中来看,你可以更清楚地看到发生什么现象:
if ( expression ) block
simple-statement if expression;
simple-statement if expression;
你可以看到if声明不在一个表达式的内部出现。现在将simple-statement进行分解:
这个例子中,接收者是$c,操作是= 。你还可以看到Boolean关键词总是出现在表达式的内部,而if则从不出现。不论第三行看起来有多糟糕,用if将他们连在一起是不可能的。但这样至少更加清楚并可以帮助阅读代码。
这里是Perl中所有的AND和OR关键词:
and, or, xor, not, &, ~, ^, |, &&, ||,
!
里面有些操作符是文字式的,有些你符号式的。Perl声明可以用任一种方式书写:
open MYFILE, $info or die "open failed";
open(MYFILE, $info) || die("open failed");
当两种方式相混合时,将出现Perl Boolean关键词的混乱,而混合是合法的。混乱还发生在插入语出现的地方,让我们先看一看下面的情况。