解析四大Perl操作符用法

开发 架构
本文向大家介绍一下Perl操作符的概念,Perl操作符中的箭头操作符和C和C++类似,双目Perl操作符->是一个中缀解引用Perl操作符。

本文和大家重点讨论一下Perl操作符的相关内容,主要包括箭头操作符,自增自减Perl操作符和指数运算等内容,希望通过本文的简单介绍大家对Perl操作符的概念有一定的了解。

箭头Perl操作符

和C和C++类似,双目Perl操作符->是一个中缀解引用Perl操作符。如果右边是一个[...]数组下标、一个{...}散列下标、或者一个(...)子过程参数列表,那么左边必须是一个对应的数组、散列、或者子过程的应用(硬引用或符号引用都行)。在一个左值(可赋值)环境里,如果左边不是一个引用,那它必须是一个能够保存硬引用的位置,这种情况下这种引用会为你自动激活。有关这方面的更多的信息(以及关于故意自激活的一些警告信息),请参阅第八章,引用。

$aref->[42]#一个数组解引用
$href->{"cornedbeff"}#一个散列解引用
$sref->(1,2,3)#一个子过程解引用
要不然,它就是某种类型的方法调用。右边必须是一个方法名(或者一个包含该方法名的简单标量变量),而且左边必须得出一个对象名(一个已赐福引用)或者一个类的名字(也就是说,一个包名字):

$yogi=Bear->new("Yogi");#一个类方法调用$yogi->swipe($picnic);#一个对象方法调用

方法名可以用一个包名修饰以标明在哪个包里开始搜索该方法,或者带着特殊包名字,SUPER::,以表示搜索应该从父类开始。参阅第十二章,对象。

自增和自减Perl操作符

++和--Perl操作符的功能和C里面一样。就是说,当把它们放在一个变量前面时,它们在返回变量值之前增加或者减少变量值,当放在变量后面时,它们在返回变量值后再对其加一或减一。比如,$a++把标量变量$a的值加一,在它执行增加之前返回它的值。类似地,--$b{(/(\w+)/)[0]}把散列%b里用缺省的搜索变量($_)里的***个“单词”索引的元素先减一,然后返回。(注:哦,这儿可能有点不公平,因为好多东西你还不知道。我们只是想让你专心。该表达式的工作过程是这样的:首先,模式匹配用表达式\w+在$_里找***个单词。它周围的圆括弧确保此单词作为单元素列表值返回,因为该模式匹配是在列表环境里进行的。这个列表环境是由列表片段Perl操作符,(...)[0]提供的,它返回列表的***个(也是***一个)元素。该值用做散列的键字,然后散列记录(值)被判断并返回。通常,如果碰到一个复杂的表达式,你可以从内向外地分析它并找出事情发生的顺序。)

自增Perl操作符有一点额外的内建处理。如果你增加的变量是一个数字,或者该变量在一个数字环境里使用,你得到正常自增的功能。不过,如果该变量从来都是在字串环境里使用,而且值为非空,还匹配模式/^[a-zA-z]*[0-9]*$/,这时自增是以字串方式进行的,每个字符都保留在其范围之内,同时还会进位:

print++($foo='99');#打印'100'
print++($foo='a0');#打印'a1'
print++($foo='Az');#打印'Ba'
print++($foo='zz');#打印'aaa'
在我们写这些的时候,自增的额外处理还没有扩展到Unicode字符和数字,不过将来也许会的。

不过自减Perl操作符没有额外处理,我们也没有准备给它增加这个处理。

指数运算

双目**是指数Perl操作符。请注意它甚至比单目Perl操作符的绑定更严格,所以-2**4是-(2**4),不是(-2)**4。这个Perl操作符是用C的pow(3)函数实现的,该函数在内部以浮点数模式运转。它用对数运算进行计算,这就意味着它可以处理小数指数,不过有时候你得到的结果不如直接用乘法得出的准确。

表意单目Perl操作符

大多数单目Perl操作符只有名字(参阅本章稍后的“命名的单目和文件测试Perl操作符”),不过,有些Perl操作符被认为比较重要,所以赋予它们自己的特殊符号。所有这类Perl操作符好象都和否定操作有关。骂数学家去。

单目!执行逻辑否,就是说,“not”。参阅not看看一个在优先级中级别较低的逻辑否。如果操作数为假(数字零,字串"0",空字串或未定义),则对操作数取否,值为真(1),若操作数为真,则值为假(“”)。

如果操作数是数字,单目-执行数学取负。如果操作数是一个标识,则返回一个由负号和标识符连接在一起的字串。否则,如果字串以正号或负号开头,则返回以相反符号开头的字串。这些规则的一个效果是-bareword等于"-bareword"。这个东西对Tk程序员很有用。

单目~Perl操作符进行按位求反,也就是1的补数。从定义上来看,这个是有点不可移植的东西,因为它受限于你的机器。比如,在一台32位机器上,~123是4294967172,而在一台64位的机器上,它是18446744073709551493。不过你早就知道这个了。

你可能还不知道的是,如果~的参数是字串而不是数字,则返回等长字串,但是字串的所有位都是互补的。这是同时翻转所有位的最快的方法,而且它还是可移植的翻转位的方法,因为它不依靠你的机器的字大小。稍后我们将谈到按位逻辑Perl操作符,它也有一个面向字串的变体。

单目+没有任何语义效果,即使对字串也一样。它在语法上用于把函数名和一个圆括弧表达式分隔开,否则它们会被解释成一个一体的函数参数。(参阅“项和列表Perl操作符”的例子。)如果你向它的一边进行考虑,+取消了圆括弧把前缀Perl操作符变成函数的作用。

单目Perl操作符\给它后面的东西创建一个引用。在一个列表上使用时,它创建一列引用。参阅第八章中的“反斜杠Perl操作符”获取详细信息。不要把这个性质和字串里的反斜杠的作用混淆了,虽然两者都有防止下一个东西被转换的模糊的含义。当然这个相似也并不是完全偶然的。

【编辑推荐】

  1. 全面认识Perl操作符
  2. 畅谈Perl操作符用法
  3. Perl二维数组用法全程剖析
  4. 深入学习Perl开发工具用法
  5. Perl多线程的两种实现方式
责任编辑:佚名 来源: javaeye.com
相关推荐

2010-07-14 14:55:07

Perl操作符

2010-07-19 11:00:24

Perl操作符

2010-07-14 14:18:51

Perl操作符

2010-07-19 11:12:43

Perl 不等于

2010-07-15 09:49:23

Perl标量

2010-07-14 14:30:31

Perl操作符

2010-07-13 11:11:39

Perl标量

2010-07-15 13:50:16

Perl目录操作函数

2009-08-21 09:30:05

is和as操作符

2010-07-05 11:12:43

常用UML图

2010-08-17 09:20:28

DIV布局

2010-09-10 09:22:50

DIV布局

2010-07-14 17:36:00

Perl运算符

2010-07-13 09:23:00

Perl变量

2010-09-02 15:12:28

CSS属性值选择器

2010-07-20 15:54:40

Perl简单变量

2010-09-10 10:10:36

CSS属性

2010-07-20 12:44:20

Perl特殊变量

2010-08-05 10:22:46

Flex效果

2010-07-13 13:49:43

Perl foreac
点赞
收藏

51CTO技术栈公众号