Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl代码中查找数据点生成错误_Perl_Variables_Runtime Error_Warnings - Fatal编程技术网

在Perl代码中查找数据点生成错误

在Perl代码中查找数据点生成错误,perl,variables,runtime-error,warnings,Perl,Variables,Runtime Error,Warnings,我有一个Perl程序,它一次从数据文件中读取一行数据,并为每行数据计算某些统计数据。有时,当程序读取我的数据集时,我会收到一条关于…未初始化值…的警告,我想知道哪行数据会生成此警告。 有什么方法可以让Perl打印(到屏幕或文件中)生成错误的数据点吗?如果脚本为每一个输入行打印一行,则通过将标准错误与输出一起刷新(使消息显示在“右”点)更容易看到错误发生的时间: 也就是说,打开perl自动刷新功能,如中所述 (自动)冲洗功能: 错误消息被写入预定义的STDERR流,普通printf被写入(默认)

我有一个Perl程序,它一次从数据文件中读取一行数据,并为每行数据计算某些统计数据。有时,当程序读取我的数据集时,我会收到一条关于
…未初始化值…
的警告,我想知道哪行数据会生成此警告。
有什么方法可以让Perl打印(到屏幕或文件中)生成错误的数据点吗?

如果脚本为每一个输入行打印一行,则通过将标准错误与输出一起刷新(使消息显示在“右”点)更容易看到错误发生的时间:

也就是说,打开perl自动刷新功能,如中所述

(自动)冲洗功能:

  • 错误消息被写入预定义的STDERR流,普通printf被写入(默认)预定义的STDOUT
  • 在这些流上写入的数据由系统保存(在Perl的控制下)以成片写入(称为“缓冲区”),以提高效率
  • STDERR和STDOUT缓冲区是独立的,可以逐行写入,也可以通过缓冲区写入(许多字符,不一定是行)
  • 使用autoflush告诉Perl修改其写入缓冲区的方案,以便在print/printf调用结束时通过操作系统写入缓冲区的内容
  • 通常,STDERR是逐行写入的。该命令告诉Perl为当前/默认流(即STDOUT)启用此功能
  • 这样做会使它们都逐行写入,以便通过其中一个发送的消息在脚本的输出中显示在一起

如果脚本为每个输入行打印一行,则通过将标准错误与输出一起刷新(使消息显示在“右”点),可以更容易地查看错误发生的时间:

也就是说,打开perl自动刷新功能,如中所述

(自动)冲洗功能:

  • 错误消息被写入预定义的STDERR流,普通printf被写入(默认)预定义的STDOUT
  • 在这些流上写入的数据由系统保存(在Perl的控制下)以成片写入(称为“缓冲区”),以提高效率
  • STDERR和STDOUT缓冲区是独立的,可以逐行写入,也可以通过缓冲区写入(许多字符,不一定是行)
  • 使用autoflush告诉Perl修改其写入缓冲区的方案,以便在print/printf调用结束时通过操作系统写入缓冲区的内容
  • 通常,STDERR是逐行写入的。该命令告诉Perl为当前/默认流(即STDOUT)启用此功能
  • 这样做会使它们都逐行写入,以便通过其中一个发送的消息在脚本的输出中显示在一起

默认情况下,Perl通常在警告中包含文件句柄和行号;i、 e

>echo hello | perl -lnwe 'print $x'
Name "main::x" used only once: possible typo at -e line 1.
Use of uninitialized value $x in print at -e line 1, <> line 1.
>echo hello | perl-lnwe“打印$x”
名称“main::x”只使用了一次:可能在-e第1行输入错误。
在-e第1行第1行的打印中使用未初始化值$x。

因此,如果您在阅读时进行计算,您会得到相应的警告。

Perl通常在默认情况下在警告中包含文件句柄和行号;i、 e

>echo hello | perl -lnwe 'print $x'
Name "main::x" used only once: possible typo at -e line 1.
Use of uninitialized value $x in print at -e line 1, <> line 1.
>echo hello | perl-lnwe“打印$x”
名称“main::x”只使用了一次:可能在-e第1行输入错误。
在-e第1行第1行的打印中使用未初始化值$x。

因此,如果您在阅读时进行计算,您会得到相应的警告。

为了回答您的问题,我的代码读取一行值,计算某些统计数据并将其写入输出文件;然后从数据文件中取出下一行,读取它,等等。。我对“刷新”会对我的代码做什么感到有点困惑:它是应该将错误消息添加到我的输出文件中,还是应该在程序读取数据文件时在屏幕上打印导致错误的数据行?我从你的回答中学到了很多;我现在将尝试在我的代码中实现它!为了回答您的问题,我的代码读入一行值,计算某些统计数据并将它们写入输出文件;然后从数据文件中取出下一行,读取它,等等。。我对“刷新”会对我的代码做什么感到有点困惑:它是应该将错误消息添加到我的输出文件中,还是应该在程序读取数据文件时在屏幕上打印导致错误的数据行?我从你的回答中学到了很多;我现在将尝试在我的代码中实现它!但是,这不告诉我代码中的行吗?我想知道数据集中哪一行产生了错误…它应该告诉你们两个。请注意,我的代码生成了2个警告。第一次发生在编译时,因此它只给出脚本(-e)中的行。第二个给出了脚本(-e第1行)和文件句柄(第1行),因为它发生在打开并从中读取的过程中。我还没有弄明白为什么,在我的例子中,Perl只告诉我代码的行,而不是生成错误的数据集中的行:你有什么想法/建议吗?但是,这不是告诉我代码中的行吗?我想知道数据集中哪一行产生了错误…它应该告诉你们两个。请注意,我的代码生成了2个警告。第一次发生在编译时,因此它只给出脚本(-e)中的行。第二个给出了脚本(-e第1行)和文件句柄(第1行),因为它发生在打开并从中读取的过程中。我还没有弄清楚为什么,在我的例子中,Perl只告诉我代码的行,而不是生成错误的数据集中的行:你有什么想法/建议吗?