Perl实现文件行数统计与末行匹配校验需求求助
Perl实现文件行数统计与末行检查逻辑
没问题,我来帮你搞定这个需求!你的核心要求很明确:统计目标文件的总行数,定位到最后一行并检查是否包含"999",如果不匹配就抛出错误信息——正好你的测试文件末行是"998",会触发这个错误逻辑。
下面是完整的Perl实现代码,我会逐行帮你解释:
#!/usr/bin/perl use strict; use warnings; # 检查命令行参数是否传入了文件名 die "请传入目标文件路径作为参数!\n" unless @ARGV == 1; my $filename = $ARGV[0]; my ($line_count, $last_line); # 打开文件(只读模式) open(my $fh, '<', $filename) or die "无法打开文件 $filename: $!"; # 遍历文件每一行,统计行数并记录最后一行 while (my $line = <$fh>) { $line_count++; $last_line = $line; # 每次循环都会覆盖,最后剩下的就是末行 } close($fh) or die "无法关闭文件 $filename: $!"; # 输出总行数 print "文件 $filename 的总行数: $line_count\n"; # 检查最后一行是否包含"999"(注意去掉换行符,避免匹配干扰) chomp $last_line; if ($last_line =~ /999/) { print "末行包含'999',执行后续步骤...\n"; # 这里写你的后续逻辑代码 } else { die "错误:文件末行内容为'$last_line',未找到'999'!\n"; }
代码细节说明:
use strict; use warnings;:开启严格模式和警告提示,这是Perl开发的最佳实践,能帮你提前规避很多语法错误和潜在逻辑问题- 命令行参数检查:确保用户运行脚本时传入了目标文件路径,没传的话直接退出并给出清晰提示
- 文件操作:用
open打开文件,失败时会输出系统级错误信息($!变量存储错误详情);遍历每一行时,计数器$line_count累加,同时用$last_line持续覆盖记录当前行,循环结束后自然保留的就是文件最后一行 chomp $last_line:去掉末行末尾的换行符,避免因为换行符存在导致匹配逻辑误判(比如原末行是"998\n",不处理的话匹配/999/也会失败,但处理后更精准)- 匹配与错误处理:用正则表达式
=~ /999/检查末行是否包含目标字符串,不匹配就用die抛出错误并终止脚本运行
测试运行示例:
假设你的脚本名为check_file.pl,输入文件是test.txt(末行内容为"998"),运行命令:
perl check_file.pl test.txt
会得到如下错误输出:
错误:文件末行内容为'998',未找到'999'!
如果把文件末行改成"999",脚本就会正常输出总行数,并提示执行后续步骤。
内容的提问来源于stack exchange,提问作者Deep Mukherjee
相关产品推荐
相关产品推荐

