-1-------------------------------------------------------------------------------------
1.unless控制语句:
在if控制语句中,只有当条件表达式为真时,才执行某块代码。
那unless是在条件为假时才会执行,与if相反。
unless($fred =~/\A[A-Z]\w*\z/i) #当条件不成立时执行下面语句
{
print "The value of \$fred doesn't look a Perl identifier name.\n";
}
2.unless的else子句
unless ($com =~/\AFeb/)
{
print "This is month has at least thirty days.\n"
}else
{
print "Do you see what's going on here?\n";
}
3.until控制语句:
如果你想颠倒wile循环的条件表达式,就使用until
until($j < $i) #条件相反
{
$j *=2;
}
这个循环会一直执行,直条件为真。它只不过是改装过的while,两者之间的唯一区别在于,until
在条件为假重复执行,
3.elsif语句:
if(con)
{
dosoming;
}
elsif(con)
{
dosoming;
}
elsif(con)
{
dosoming;
}
else
{
defualt;
}
4.自增与自减
++
--
++/--操作符写在变量之前就能先增/减 变量的值,然后获取新值
my $m = 5;
my $n = $m++; #先增加变量的值$m的值为6,然后把该值放入$n
my $c = --$m; #先减少$m的值到5,然后把该值放入$c
my $d = $m++; #$d得到的是$m之前的值5,然后$m的值增加到6
my $e = $m--; #$e得到的是$m之前的值6,然后$m的值减少到5
如果操作符在前,先会增加或自减,然后使用新值;
如果操作符在后,就会先返回其原来的值,然后在再自增或自减
5.for结构
for(初始化;测试;递增)
{
程序主体;
程序主体;
}
对perl而言就一种变相的while循环
初始化;
while(测试)
{
程序主体;
程序主体;
递增;
}
for循环最常见的用途,就是控制重复的运算过程
for(my $i=1;$i < 10;$++)
{
print "I Can see $i\n";
}
for(my $i=10;$i>=1;$i--)
{
print "I can see $i\n";
}
for无限循环
for(;;)
{
print "Looping\n";
}
for and foreach是等价的
-1-------------------------------------------------------------------------------------
-2-------------------------------------------------------------------------------------
循环控制
last操作符
last操作符能立即中止循环的执行,和C的的break一样
while(<>)
{
if(/last/)
{
last;
}
elsif(/fred/)
{
print ;
}
next操作符
有时候你并不想立刻退出循环,但需要立刻结束当前这次迭代循环。这是就next的功能,
它会跳到当前循环块的底端。在next之后,程序会继续执行循环的下一次迭代和C的continue
一样的功能。
$num;
while(<>)
{
$num++;
foreach(split)
{
$total++;
next if /\W/;
$valid++;
$count{$_}++;
}
last if $num == 15;
}
print "Total things = $total,valid words = $valid\n";
foreach $word(sort keys %count)
{
print "$word was seen $count{$word} times.\n";
}
redo操作符:
redo它能控制返回当前循环块的顶端,而不经过任何测试条件,也不会进入下一次迭代循环。
my @words=qw(fred barnye pebble dino wilma betty)
my $errors;
foreach (@words)
{
#redo here
print "Type the word: '$_' ";
chomp(my $try = <STDIN>);
if($try ne $_)
{
print "Sorry - That's not right.\n\n";
$errors++;
print "error count: $errors\n";
redo;
}
}
next and redo 两者最大区别在于,next会正常进行下一次迭代,而redo则会重新执行这次迭代
foreach(1..10)
{
print "Number $_.\n";
print "Please choose: last,next,redo,or none of the above? ";
chomp(my $choice=<STDIN>);
print "\n";
last if $choice =~/last/i;
next if $choice =~/next/i;
redo if $choice =~/redo/i;
print "That wasn't any of the choice ...onward\n";
}
print "all,folks\n";
带标签的块:
当有你需要从内层对外层的循环控制时,请使用标签(label).
LINE: while(<>)
{
foreach (split)
{
last LINE if /END/i; 跳出标签为LINE的循环
....;
}
}
条件运算符:
expression ? if_true_expr: if_false_expr
如果为真,则执行冒号表达式前的表达式
否则就执行冒号后的表达式。
判断大小
my $a=<>;
my $b=<>;
my $max = $a > $b?$a:$b
嵌套分支:
my $size = ($with < 10) ? "small":
($with < 20)?"medium":
($with < 50)?"large":
"extr-large"; #default value
逻辑操作符:
逻辑AND(与) 操作符(&&)
逻辑OR(或) 操作符(||)
if( (9 <= $hour) && ($hour < 17))
{
prnt "OK\n";
}
if(($name eq "fred")||($name eq "barney"))
{
print "OK\n";
}
短路操作符:
perl的短路操作符求得值不只是简单的布尔值,而是最后运算的那部分表达的值
my $last_name = $last_name{$somenname} ||'(no last name)';
定义或操作符:
// #defined-or
for my $try (0,undef,'0',1,25)
{
print "Tring [$try] ----> ";
my $value = $try // 'default';
say "\tgot [$value]";
}
-2-------------------------------------------------------------------------------------
控制语句
最新推荐文章于 2022-04-18 07:00:00 发布