Perl环境:将'and' 和'or' 分类

ZDNet软件频道 时间:2002-08-09 作者:BUILDER.COM |  我要评论()
本文关键词:
初学者可能会发现Perl之中所谓的布尔表达式比其他语言中的要更加复杂。例如,Perl中的AND写成&, && 还是and?Perl中三种写法都可以,在这篇文章里面将解释哪一种是最好的。
初学者可能会发现Perl之中所谓的布尔表达式比其他语言中的要更加复杂。例如,Perl中的AND写成&, && 还是and?Perl中三种写法都可以,在这篇文章里面将解释哪一种是最好的。

AND和OR基础原理

除非你一直生活在山洞里,下面的语句你应该非常明白:

  • I'll go if Peter goes AND Paul goes.
  • I'll go if Peter goes OR Paul goes.

第一个语句中表明在I'll go之前"Peter goes"和"Paul goes"都要为真。因此AND代表一个事物只有在两个部分都为真时才为全真(I'll go)。

第二个语句表明如果有一个部分为真,则I'll go就为全真,这就是OR所代表的意思。感谢你,George Boole,让我们一遍又一遍地学这些东西。

但是看下面:

  • I'll go if Peter goes OR Paul goes AND Mary goes.

是不是只要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关键词的混乱,而混合是合法的。混乱还发生在插入语出现的地方,让我们先看一看下面的情况。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134