Perl 我的脚本在读取文件时漏行

Perl 我的脚本在读取文件时漏行,perl,file,file-handling,Perl,File,File Handling,我正在做一个大的(8000行)库数据转换。我读入一个文件,想逐行修改它。读取文件在到达文件末尾之前停止 open(my $infh, "<", 'infile.pica') || die('Could not open pica file'); open(my $outfh, ">", 'infile.pica.norm') || die('Could not open pica file'); my $counter = 0; while

我正在做一个大的(8000行)库数据转换。我读入一个文件,想逐行修改它。读取文件在到达文件末尾之前停止

open(my $infh, "<", 'infile.pica') 
        || die('Could not open pica file'); 
open(my $outfh, ">", 'infile.pica.norm') 
        || die('Could not open pica file');

my $counter = 0;

while (my $line = <$infh>) {

    $counter++;
    # for debugging - this is the last line being read. 
    # infile actually has 7857 lines

    if ($counter >= 7691) {
        say $line;
    }
    # modification commented out for debugging
    print $outfh $line;
}   
close $infh;
close $outfh;
以下是数据集的一个片段,它将停止读取:

002@ $0Oax
002C $aText$btxt
002D $aComputermedien$bc
002E $aOnline-Ressource$bcr
004A $09780309160193
006X $cEBC$03564211
010@ $aeng
011@ $a2010
你可以看到每一行后面都有一个换行符
(嘿,代码
0A
)。第006X行是它停止读取的位置

解决方法是:问题与我发布的脚本无关,甚至与从文件中读取无关。在我没有发布的脚本中,我忘记通过调用以下命令刷新输出:

PICA::Writer->end()
见:

写完。根据格式和输出处理程序,将写入页脚(例如XML结束标记),并关闭输出处理程序。之后,状态设置为
PICA::Writer::end
。如果编写器以前没有启动过,则首先调用start方法

结束或写入已结束的写入程序将抛出错误。您可以使用output方法或start方法重新启动已结束的写入程序


你的代码看起来还可以,也许可以发布一些关于你的设置的详细信息?你有没有看过最后一行的字符?默认情况下,Perl将在换行符(
\n
)上拆分行-您的所有行都有换行符吗?您可以用记事本++之类的东西打开文件,使其显示所有字符(如CR、LF等)并查看可疑行,如果查看输入文件的hey转储,可能确实存在无法“看到”的内容。每行末尾都有一个
A0
。基于此,您在问题中发布的代码与您的问题没有任何关系,很明显它没有生成您声称的输出。对你请求帮助的人故意撒谎不是个好主意。另外,不要发布文本截图。我给你演示了如何得到一个六边形垃圾场。把它贴出来。
PICA::Writer->end()