知用网
白蓝主题五 · 清爽阅读
首页  > 电脑技巧

Perl循环语句的实用写法与技巧

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";
}

这种写法适合你需要知道当前是第几个元素的时候,比如生成带编号的列表。