Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131339
  • 博文数量: 21
  • 博客积分: 576
  • 博客等级: 中士
  • 技术积分: 319
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-23 16:19
个人简介

没评论

文章分类

全部博文(21)

文章存档

2013年(1)

2012年(20)

我的朋友

分类: Python/Ruby

2012-06-19 22:22:22

unless控制结构
if控制结构中,条件为真的时候执行。unless刚好相反:条件为假时执行。
unless跟if语句一样都能使用else。

until控制结构
while语句在条件为真时会一直执行。until语句则在条件为假时一直执行,直到条件为真。

条件修饰词
可以把条件修饰词写在语句后面:
print "$m.\n" if $m>0;
上句相当于
if ($m > 0){
print "$m.\n";
}
其它的条件表达式也可以这么写。

裸块控制结构:没有关键字或条件的代码块。

elsif子句(注意不要写成elseif)
用在if语句中,逐项检查一系列的条件表达式,看看其中哪个为真。示例如下:
if ( ! defined $dino) {
    print "The value is undef.\n";
} elsif ($dino =~ /^-?\d+\.?$/) {
    print "The value is an integer.\n";
} elsif ($dino =~ /^-?\d*\.\d+$/) {
    print "The value is a _simple_ floating-point number.\n";
} elsif ($dino eq '') {
    print "The value is the empty string.\n";
} else {
    print "The value is the string '$dino'.\n";
}

自增和自减
++为自增操作符
--为自减操作符

前置自增和后置自增
my $m = ++$n    #前置自增:先把$n自增1,再赋值给$m
my $m = $n++    #后置自增:先把$n赋值给$m,然后$n自增1
自减操作也是同样用法。

for控制语句
for (initialization; test; increment) {
    body;
    body;
}
相当于
initialization;
while (test) {
    body;
    body;
    increment;
}
示例如下:
for ($i = 1; $i <= 10; $i++) {  # count from 1 to 10
    print "I can count to $i!\n";
}

foreach和for
foreach和for是等价的,当后面的圆括号里有两个分号时就是for循环,没有分号就是foreach循环。

循环控制操作符
last操作符能立即终止循环,跳出循环块。
next操作符能立即结束该次迭代,继续下次迭代。
redo操作符能立即返回到本次循环的顶端,不经过任何条件测试,也不会进入下一次循环迭代。

带标签的块
可以用标签命名循环块,在内循环中可以根据需要用标签名直接定位到外循环块。用法示例如下:
LINE: while (<>) {
  foreach (split) {
    last LINE if /__END__/;  # bail out of the LINE loop
    ...
  }
}

三目操作符
用法:expression ? if_true_expr : if_false_expr
作用:先执行条件表达式,若为真则执行第二个表达式,若为假则执行第三个表达式。
示例如下:
my $size =
    ($width < 10) ? "small"  :
    ($width < 20) ? "medium" :
    ($width < 50) ? "large"  :
                    "extra-large"; # default

逻辑操作符
逻辑与&&或and:只有两个表达式都为真时才为真
逻辑或||或or:任何一个表达式为真都为真
perl在这里会走捷径,在逻辑与中,当左边表达式为假时,不再判断右边表达是真假;在逻辑或中,当左边表达式为真时,不再判断右边表达是真假。因为这种特性,它们被称为短路逻辑操作符。

短路逻辑操作符的值不是简单的布尔值,而是最后运算的那部分表达式的值。可以利用这个返回值来赋值默认值:
my $last_name = $last_name{$someone} || '(No last name)';
但是如果$last_name{$someone}值为0也可能被赋值为默认值,改进如下:
my $last_name = defined $last_name{$someone} ?
    $last_name{$someone} : '(No last name)';
但是这样写太龟毛了。

定义否操作符
perl5.10引入了定义否操作符//,在发现左边已定义的值时进行短路,不论左边的值是真是假。
用法示例如下:
use 5.010;
my $last_name = $last_name{$someone} // '(No last name)';
当$last_name{$someone}有值时就进行短路。


阅读(627) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~