perl 的循环结构有, for, foreach, while, until 四种, 其中for 和 foreach 底层结构一样, 它俩是等价的. while 和 until 是相反的逻辑,类似于if 和 unless 的关系. 控制循环语句有last, next, redo三种方式, 其中redo 是一个很新鲜的关键字, 这是java语言所不支持的.
1. 循环结构
1.1 for 循环
perl 中的for 循环和其它语言for循环用法相同
for( 变量初始化
; 测试表达式
; 变量变化
) {
codes
;
}
1.2 foreach 循环
perl 语言支持其它语言未必不支持的foreach循环, 主要用于遍历数组或列表, 非常好用和for等价, 用for关键字也行
foreach 变量定义
(数组
/列表
){
codes
}
1.3 while 循环
当表达式为真时, 会执行循环体, 直到表达式为假或遇到last 语句后终止循环
while (testExp){
codes;
}
1.4 until 循环
当表达式为假时, 会执行循环体, 直到表达式为真或遇到last 语句后终止循环
until (testExp){
codes;
}
3. 循环控制
perl 控制循环的语句有: next, last, redo:
next: 类似于java 中的continue, 跳过本次循环, 进行下一次循环last: 类似于java 中的break, 直接结束最近的一层循环结构,执行循环结构后的语句redo: 重新执行本次循环
2. 测试
2.1 测试脚本
print "\n#################### 1.1 for ####################\n";
$sum=0;
for(my $j=1; $j<=100; $j++){
$sum += $j;
}
print "[for] 1+2+3+...+100=$sum\n";
print "\n#################### 1.2 foreach ####################\n";
$sum=0;
foreach (1..100){
$sum += $_;
}
print "[foreach] 1+2+3+...+100=$sum\n";
$sum=0;
foreach my $idx ( 1..100) {
$sum += $idx;
}
print "[foreach] 1+2+3+...+100=$sum\n";
print "\n#################### 1.3 while ####################\n";
$sum=0;
$i=1;
while($i<=100){
$sum += $i;
$i++;
}
print "[while] 1+2+3+...+100=$sum\n";
print "\n#################### 1.4 until ####################\n";
$sum=0;
$i=1;
until($i>100){
$sum += $i;
$i++;
}
print "[until] 1+2+3+...+100=$sum\n";
print "\n#################### 2. 控制循环 ####################\n";
for my $k(1..100){
print "[$k] please input your match score: 1-redo 2-next 3-last 4-other: ";
chomp
($flag=<STDIN>);
if($flag==1){
redo;
}elsif($flag==2){
next;
}elsif($flag==3){
last;
}else {
}
print "[$k] your choese is $flag\n";
}
print "finishe ...\n";
2.2 测试输出
$
./test
.pl
[for] 1+2+3+...+100=5050
[foreach] 1+2+3+...+100=5050
[foreach] 1+2+3+...+100=5050
[while] 1+2+3+...+100=5050
[until] 1+2+3+...+100=5050
[1] please input your match score
: 1-redo 2-next 3-last 4-other
: 4
[1] your choese is
4
[2] please input your match score
: 1-redo 2-next 3-last 4-other
: 1