Perl用File::ReadBackwards倒读日志报Not a GLOB reference错误如何解决?
报错原因
$bw 是 File::ReadBackwards 模块返回的实例对象,并非Perl原生的GLOB类型文件句柄,直接调用内置close()函数处理非GLOB类型变量就会触发Not a GLOB reference报错。
修复方法
- 直接删除
close($bw);行即可:File::ReadBackwards的实例在变量生命周期结束时会自动释放关联的文件资源,无需手动关闭。 - 如果需要主动提前释放资源,调用模块提供的对象方法即可:将
close($bw);替换为$bw->close();。
其他代码优化建议
- 函数
process_log没有接收传入的文件参数,建议在函数开头增加my $file = shift;,避免依赖全局变量导致逻辑异常。 - 正则匹配路径的逻辑没有判断匹配结果,建议增加匹配成功校验,防止匹配失败时后续逻辑取到空值出错。
- 写入
status.log时使用了全局裸字句柄FW,建议替换为词法变量:open my $fw, '>', $filename or die $!;,避免全局符号冲突,安全性更高。
内容的提问来源于stack exchange,提问作者JozefSK
相关产品推荐
相关产品推荐

