2018-11-12-Perl入门3

Perl条件语句及循环

Posted by DL on November 12, 2018

正所谓前人栽树,后人乘凉。

参考资料 RUNBBO

1. Perl 条件语句

Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。

可以通过下图来简单了解条件语句的执行过程:

FnbXzd.jpg

1.1 if语句

一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。

#!/usr/bin/perl
 
$a = 10;
# 使用 if 语句判断布尔表达式
if( $a < 20 ){
    # 布尔表达式为true时执行
    printf "a 小于 20\n";
}
print "a 的值为 : $a\n";
 
$a = "";
# 使用 if 语句判断布尔表达式
if( $a ){
    # i布尔表达式为true时执行
    printf "变量 a 为 true\n";
}
print "a 的值为 : $a\n";

1.2 if…else…语句

一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。

#!/usr/bin/perl
 
$a = 100;
# 使用 if 语句判断布尔表达式
if( $a < 20 ){
    # 布尔表达式为true时执行
    printf "a 小于 20\n";
}else{ 
    # 布尔表达式为false时执行
    printf "a 大于 20\n";
}
print "a 的值为 : $a\n";
 
$a = "";
# 使用 if 语句判断布尔表达式
if( $a ){
    # 布尔表达式为true时执行
    printf "a 条件为 true\n";
}else{
   # 布尔表达式为false时执行
    printf "a 条件为 false\n";
}
print "a 的值为 : $a\n";

1.3 unless语句

一个 unless 语句 由一个布尔表达式后跟一个或多个语句组成。

#!/usr/bin/perl
 
$a = 20;
# 使用 unless 语句检测布尔表达式
unless( $a < 20 ){
    # 布尔表达式为 false 时执行
    printf "a 大于等于 20\n";
}
print "a 的值为 : $a\n";
 
$a = "";
# 使用 unless 语句检测布尔表达式
unless ( $a ){
    # 布尔表达式为 false 时执行
    printf "条件 a 为 false\n";
}
print "a 的值为 : $a\n";

2. Perl循环

有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

编程语言提供了更为复杂执行路径的多种控制结构。

循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:

FnqQFU.png

2.1 while循环

while 语句在给定条件为 true 时,重复执行语句或语句组。循环主体执行之前会先测试条件。

#!/usr/bin/perl
 
$a = 10;
 
# 执行 while 循环
while( $a < 20 ){
   printf "a 的值为 : $a\n";
   $a = $a + 1;
}

2.2 for 循环(重点)

Perl for 循环用于多次执行一个语句序列,简化管理循环变量的代码。

语法格式:

for ( init; condition; increment ){
	statement(s);
}

下面是 for 循环的控制流程解析:

  • init 会首先被执行,且只会执行一次。这一步允许声明并初始化任何循环控制变量。
  • 接下来,会判断 condition。如果为 true,则执行循环主体。如果为 false,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  • 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许更新循环控制变量。
  • 条件再次被判断。如果为 true,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为 false 时,for 循环终止。
  • 在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。
  • condition 可以是任意的表达式,当条件为 true 时执行循环,当条件为 false 时,退出循环。
#!/usr/bin/perl
 
# 执行 for 循环
for( $a = 0; $a < 10; $a = $a + 1 ){
    print "a 的值为: $a\n";
}

2.3 foreach 循环(重点)

Perl foreach 循环用于迭代一个列表或集合变量的值。

语法格式如下所示:

foreach var (list) {
	...
}
#!/usr/bin/perl
 
@list = (2, 12, 36, 42, 51);
 
# 执行foreach 循环
foreach $a (@list){
    print "a 的值为: $a\n";
}