第四章 Perl操作符

Perl操作符就是Perl语法中的一系列符号。每一个操作符都有零个或多个操作数。可以把操作符看成是一系列特别的函数,操作数就是函数的参数。

操作符的特性

学习操作符就是了解每一个操作符的特性,比如:有几个操作数啊,与其他操作符如何结合,提供什么语境,什么语法之类的。

可以使用perldoc perlop 和 perldoc perlsyn来查看Perl操作符的相关文档。

优先级

不同的操作符有不同的优先级,处理顺序就是从优先级最高的开始处理。就像基本数学运算,先算乘除后加减,因为乘除的优先级比加减法高。

通过perldoc perlop可以查看所有操作符的优先级表。不需要特别去记忆这个表,通过简化代码,加上必要的括号,一般都不会有优先级上的困惑。

结合性

有的操作符是向左边结合的,如2+3+4,先计算2+3,然后再将结果加上4。有的是向右边结合的,如234, 先计算3**4,然后计算2的81次方。
当然你只需要知道基本的数学操作符的优先级和结合性就足够了。

操作数

0个操作数的叫零元操作符,1个操作数的叫一元操作符,2个操作数的叫2元操作符,3个操作数的叫3元操作符。操作列表的叫列表操作符。

位置

中缀运算符出现在操作数之间。大多数数学运算符都是中缀运算符,如乘号(*)就是在2个数之间的:$length * $width。

前缀运算符出现在操作数前面;后缀运算符出现在操作数后面。这些操作符通常都是一元的。前缀操作符如逻辑非(!$y),后缀运算符自增($z++)。

将操作数包围起来的操作符叫环缀操作符。如构造匿名哈希的({ }),字符操作符(qq[ ])。

还有些操作符比较奇怪,它在某些操作符后面,但是又得包围其他操作数的。比如访问哈希和数组的元素的操作符$hash{$x} ,$array[$y]。

操作符的类型

数字操作符

数字操作符为操作数提供数字语境。比如标准的数学上的操作符:

+ 加
- 减
* 乘
/ 除
** 乘方
% 模,取余
+=,-=, *=, /=, **=,  %=  组合形式
--  前缀自减
== 相等
!= 不等
> 大于
< 小于
>= 大于等于
<= 小于等于
<=> 排序中的比较符号

字符串操作符

字符串操作符为操作数提供字符串语境。比如正则表达式的绑定操作符(=~, !~),字符串连接符(.),字符串比较操作符(eq),还有sort排序中的字符串比较操作符(cmp)。

逻辑操作符

逻辑操作符为操作数提供布尔语境。如&&, ||, and, or,//,三目操作符(?:) 逻辑非 (!), not (优先级比!低) ,还有xor。
注意//和||的区别,操作符//只要目标操作数有定义就为真,即使是0和空字符串。

位操作符

位操作符提供的是数字语境。这些操作符不太常见。
左移位(<<),右移位(>>), 逐位与运算(&), 逐位或运算(|), 逐位异或运算(^), 以及组合形式(<<=,>>=,&=,|=,^=)。

特殊操作符

自增操作符的行为比较特别,当操作数是数字时就数值加一。如果是字符串就增长字符串。

my $num = 1;
my $str = 'a';

$num++;
$str++;
is( $num, 2, 'numeric autoincrement' );
is( $str, 'b', 'string autoincrement' );


no warnings 'numeric';
$num += $str;
$str++;

is( $num, 2, 'numeric addition with $str' );
is( $str, 1, '... gives $str a numeric part' );

重复操作符(x)也有着复杂的行为,在列表上下文中将列表重复;在标量上下文中,重复并连接成一个字符串。
看个例子就明白了:

my @scheherazade = ('nights') x 1001;
my $calendar = 'nights' x 1001;
my $cal_length = length $calendar;

is( @scheherazade, 1001, 'list repeated' );
is( $cal_length, 1001 * length 'nights',
'word repeated' );


my @schenolist = 'nights' x 1001;
my $calscalar = ('nights') x 1001;

is( @schenolist, 1, 'no lvalue list' );
is( length $calscalar,
1001 * length 'nights', 'word still repeated' );

范围操作符(..),在列表语境下会生成从一个操作数到另一个操作数的列表,可以是数字也可以是字符串。
在布尔语境下行为很不一样:操作符初始值为假,在左操作数为真时整体变为真值,持续这个状态直到右操作数为真时,整体再转变变为假值。

#列表语境
my @cards = ( 2 .. 10, 'J', 'Q', 'K', 'A' );

#布尔语境
 foreach my $x ( 1..10 ){print $x if $x == 3..$x == 4}
# 打印 3 4

#利用该特性来方便地提取邮件正文:
while (/Hello, $user/ .. /Sincerely,/)
{
say "> $_";
}

逗号操作符(,)在标量语境时,它计算并返回左边的操作数,然后继续计算右边的操作数;在列表语境中,它从左到右依次计算2个操作数。

胖箭头操作符(=>),行为类似逗号操作符,并且会自动引起左边的操作数。参见哈希。

三点操作符是零元操作符,没有操作数,没有优先级,没有结合性。类似占位符的效果,在运行时会抛出异常。

sub some_example {
#后续补上
...
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容