Perl脚本问题:清理文本文件中不存在路径时误删有效路径
问题修复:Perl脚本误删存在的路径
核心bug分析
- 数组赋值逻辑错误:
@new_line_list=$line;这行代码每次循环都会直接替换整个数组,导致数组永远只保留最后一个符合条件的路径,前面存在的路径全部被覆盖丢失。 - 缺少换行符:读取时用
chomp移除了每行的换行符,写入文件时未重新添加,最终文件里的路径会无换行挤在一起。 - 错误提示文案错误:第二个
open是写文件操作,但错误提示写的是"Can't open file for reading",属于文案错误。
修复后的完整代码
use strict; use warnings; my $file = "/path/to/file.txt"; my @new_line_list; open(FH1, "<", $file) or die "Can't open file for reading: $!"; while(my $line = <FH1>){ chomp $line; next unless -d $line; push @new_line_list, $line; # 用push追加元素,而非替换整个数组 } close(FH1); # 重写文件 open(FH2, ">", $file) or die "Can't open file for writing: $!"; foreach my $line (@new_line_list) { print FH2 "$line\n"; # 重新添加换行符,保证文件格式正确 } close(FH2);
额外优化建议
- 推荐使用词法文件句柄(如
open my $fh, "<", $file)替代全局文件句柄FH1/FH2,更安全且符合现代Perl编码规范。 - 若路径包含空格或特殊字符,当前按行读取的逻辑可正常处理,无需额外修改。
内容的提问来源于stack exchange,提问作者Blurman
相关产品推荐
相关产品推荐

