Perl 循环
在 Perl 中,循环语句用于重复执行代码块。Perl 提供了多种循环结构,包括 for
, foreach
, while
, until
和 do-while
等。以下是关于 Perl 循环的详细说明:
1. for 循环
for
循环用于固定次数的迭代,类似于 C 风格的循环。
- 结构:
for (初始化; 条件; 更新) {
# 代码块
}
- 示例:
for (my $i = 0; $i < 5; $i++) {
print "$i\n"; # 输出 0 1 2 3 4
}
2. foreach 循环
foreach
用于遍历数组或列表的元素。for
和 foreach
在 Perl 中可以互换使用。
- 结构:
foreach 变量 (列表) {
# 代码块
}
- 示例:
my @fruits = ("apple", "banana", "cherry");
foreach my $fruit (@fruits) {
print "$fruit\n"; # 输出 apple banana cherry
}
- 使用默认变量
$_
:
foreach (@fruits) {
print "$_\n"; # 输出 apple banana cherry
}
3. while 循环
while
循环在条件为真时重复执行。
- 结构:
while (条件) {
# 代码块
}
- 示例:
my $count = 0;
while ($count < 5) {
print "$count\n"; # 输出 0 1 2 3 4
$count++;
}
4. until 循环
until
是 while
的反向逻辑,条件为假时执行。
- 结构:
until (条件) {
# 代码块
}
- 示例:
my $count = 0;
until ($count >= 5) {
print "$count\n"; # 输出 0 1 2 3 4
$count++;
}
5. do-while 循环
do-while
至少执行一次,条件在循环末尾检查。
- 结构:
do {
# 代码块
} while (条件);
- 示例:
my $count = 0;
do {
print "$count\n"; # 输出 0 1 2 3 4
$count++;
} while ($count < 5);
- 类似地,
do-until
:
do {
print "$count\n";
$count++;
} until ($count >= 5);
6. 循环控制语句
- next:跳过当前迭代,继续下一次循环(类似
continue
)。
foreach my $num (1..5) {
next if $num % 2 == 0; # 跳过偶数
print "$num\n"; # 输出 1 3 5
}
- last:退出整个循环(类似
break
)。
foreach my $num (1..10) {
last if $num > 3; # 在 3 后退出
print "$num\n"; # 输出 1 2 3
}
- redo:重新开始当前迭代,不更新循环变量。
my $i = 0;
while ($i < 3) {
print "$i\n"; # 输出 0 0 0(无限循环,除非有其他退出条件)
redo if $i == 0;
$i++;
}
7. 标签与嵌套循环
- 使用标签控制多重循环的
next
,last
或redo
。
OUTER: foreach my $i (1..3) {
INNER: foreach my $j (1..3) {
print "$i,$j\n";
last OUTER if $j == 2; # 退出整个外层循环
}
}
# 输出:1,1 1,2
8. 循环修饰符
Perl 允许将简单循环写为单行修饰符。
print "$_\n" foreach @fruits; # 输出 apple banana cherry
print "$_\n" while $_++ < 5; # 输出 0 1 2 3 4
9. 注意事项
- 严格模式:使用
use strict;
强制变量声明。
use strict;
my @array = (1, 2, 3);
foreach my $item (@array) { print "$item\n"; }
- 默认变量
$_
:许多循环结构默认使用$_
,简化代码。
foreach ("a", "b", "c") { print; } # 输出 abc
- 无限循环:小心避免无终止条件。
while (1) { print "Infinite\n"; last; } # 使用 last 避免无限循环
10. 示例:统计数组中的偶数
use strict;
my @numbers = (1, 2, 3, 4, 5, 6);
my $even_count = 0;
foreach my $num (@numbers) {
$even_count++ if $num % 2 == 0;
}
print "Even numbers: $even_count\n"; # 输出 Even numbers: 3
11. 示例:嵌套循环打印乘法表
use strict;
for my $i (1..3) {
for my $j (1..3) {
print "$i * $j = ", $i * $j, "\n";
}
}
# 输出:
# 1 * 1 = 1
# 1 * 2 = 2
# 1 * 3 = 3
# 2 * 1 = 2
# ...
如果你有具体问题或需要更复杂的循环示例,请告诉我!