其他
Perl学习03之流程控制结构
"pythonic生物人"的第8篇分享
摘要
本文详细介绍Perl语言中的布尔运算、条件判断、循环和循环控制。
目录
正文开始啦
1、布尔值及逻辑运算符
Perl语言布尔值(Boolean Values)
数字标量,0为假,其他数字为真;
字符串标量,''为假,其他为真;
其它先转化为以上两种再判断;
"!"表示取反。
逻辑运算符
运算符 含义 实例
and(&&) 且 condition1 and condition2,两个条件都为真,返回真
or(||) 或 condition1 or condition2,两个条件有一个为真,返回真
not(!) 取反 not condition1,条件为真,取反则为假
2、条件判断
条件判断1:if....elsif....else
if (condition){#条件为真时执行
do something.....
}else{
do something else......
}
!/usr/bin/perl
use strict;
use warnings;
my $str1 = $ARGV[0];
my $str2 = $ARGV[1];
if($str1 == $str2){
print "EQ numbers, good job!\n";
}elsif($str1>$str2){
print "Bigger numbers, go on!\n";
}else{
print "Over!\n";
}
perl ifelse.pl 1 1
EQ numbers, good job!
perl ifelse.pl 2 1
Bigger numbers, go on!
perl ifelse.pl 2 3
Over!
条件判断2:unless...else....
unless(condition)){#条件为假时执行
do somesthing...
}else{
do something else
}
!/usr/bin/perl
use strict;
use warnings;
my $str1=$ARGV[0];
my $str2=$ARGV[1];
unless($str1!=$str2){
print "EQ numbers!\n";
}else{
print "NE numbers!\n";
}
perl unless1.pl 1 1
条件判断3:三目运算符
!/usr/bin/perl
use strict;
use warnings;
my $result=($ARGV[0]==$ARGV[1] ? "EQ numbers" : "NE numbers");
print "$result\n";
perl ternary_operator.pl 1 2
NE numbers
perl ternary_operator.pl 1 1
EQ numbers
循环1:while
while(condition){
do something..
}
#!/usr/bin/perl
use strict;
use warnings;
my $in=5;
while($in<10){
print "$in\n";
$in+=2;
}
perl while1.pl
5
7
9
循环2:for
for(start;expression1;expression2){
do something.....
}
#!/usr/bin/perl
use strict;
use warnings;
for(my $i=5;$i<10;$i+=2){
print "$i\n";
}
perl for1.pl
5
7
9
循环3:foreach
以下两种方式结果相同,例如,foreach1.pl
#!/usr/bin/perl
use strict;
use warnings;
foreach (5..10){
print "$_\n";
}
print "\n";
foreach my $i (5..10){
print "$i\n";
}
perl foreach1.pl
5
6
7
8
9
10
5
6
7
8
9
10
循环4:each
例如,while_each1.pl
#!/usr/bin/perl
use strict;
use warnings;
my %hash=(
"apple"=>"fruit",
"tomat"=>"vegetables",
"tomat1"=>"vegetables"
);#定义哈希,使用()而不是{}
while(my($k,$v)=each %hash){
print "$k\t$v\n";
}
perl while_each1.pl
tomat vegetables
apple fruit
tomat1 vegetables
last
例如,last1.pl
#!/usr/bin/perl
use strict;
use warnings;
my $in=2;
foreach (1..20){
last if $_%$in == 0;#当遇到能被2整除的数时,跳出当前循环
print "$_\n";
}
next
跳过本次循环,进入下一轮循环,类似python中的continue。
例如,next1.pl
#!/usr/bin/perl
use strict;
use warnings;
my $in=2;
foreach (1..20){
next if $_%$in == 0;#跳过能被2整除的数
print "$_\n";
}
perl next1.pl
1
3
5
7
9
11
13
15
17
19
redo
忽略之后的语句,重新执行本次循环。
例如,redo1.pl
#!/usr/bin/perl
use strict;
use warnings;
my @array;
for my $i (1..3){
push @array, $i;
redo if(@array == 2);#重新执行push @array, $i;
}
print "@array\n";
perl redo1.pl
1 2 2 3
表达式后面加流程控制语句
print "True.\n" if $a > $b;#if $a > $b为真,执行print语句;
5、参考资料