for 和 foreach 的基本用法
在 Perl 中,for 和 foreach 其实是同一个东西的不同写法,可以互换使用。当你需要遍历一个数组时,foreach 更直观。比如你有一堆文件名要处理:
@files = ('a.txt', 'b.log', 'c.pl');
foreach my $file (@files) {
print "正在处理 $file\n";
}这段代码会逐个打印每个文件名,就像你手动一个个点开文件处理一样。
while 循环处理文件读取
读取文件内容是常见任务,while 循环在这里特别顺手。打开一个日志文件逐行读取:
open(my $fh, '<', 'access.log') or die $!;
while (my $line = <$fh>) {
chomp $line;
next if $line =~ /^$/; # 跳过空行
print "记录: $line\n";
}
close($fh);每一行都被读进来,过滤掉空行后再输出,就像你在翻一本厚厚的值班记录本。
until 和 unless 的反向逻辑
until 是 while 的反面,条件为假时才执行。比如你想等某个临时文件消失再继续:
until (! -f '/tmp/working.lock') {
sleep(5); # 每5秒检查一次
}
print "锁文件已释放,继续操作\n";这就像你等着同事完成操作,只要那个“工作中”的牌子还挂着,你就一直等。
last 和 next 控制循环流程
遇到特定情况想跳过当前轮或直接退出?last 和 next 就派上用场了。比如处理一批用户,碰到管理员就跳过,碰到自己就停止:
@users = qw(alice bob admin charlie self);
for my $user (@users) {
next if $user eq 'admin'; # 跳过管理员
last if $user eq 'self'; # 遇到自己就停下
print "处理用户: $user\n";
}这样 alice 和 bob 会被处理,charlie 不会,因为循环在 self 就终止了。
c-style for 循环适用场景
当你需要像 C 语言那样控制初始化、条件和递增时,可以用 c-style for。比如按索引处理数组元素:
for (my $i = 0; $i < @files; $i++) {
print "$i: $files[$i]\n";
}这种写法适合你需要知道当前是第几个元素的时候,比如生成带编号的列表。