我希望你能帮助我解决一个有问题的脚本,我正在运行一个基因分析数据集,作为一些质量控制检查的一部分。
当我运行脚本时,这是一个Perl脚本(在Windows中运行),我得到以下错误:Use of uninitialized value $_ in pattern match (m//) at /IC/ic.pl line 803, <$z> line 1.
查看ic.pl
文件,似乎生成错误的第803行是下面这行:
if (/^##/)
在脚本的以下部分中:
my $header = <$z>;
if ($header =~ /^#.*/) {
my $loop = 1;
while ($loop) {
if (/^##/) { }
else {
$header = <$z>;
$loop = 0;
}
}
}
chomp $header;
我不知道问题出在哪里。如果有人能解释一下潜在的原因,我将不胜感激。
我尝试通过Linux/Ubuntu的Windows子系统运行相同的脚本,收到相同的错误。
2条答案
按热度按时间p8ekf7hl1#
您的错误意味着
$_
变量未定义,它不包含值。通常情况下,这是因为文件句柄已耗尽,或从未打开,或文件为空。在你的例子中,这可能是因为你试图发明自己的循环控制,它不检查eof(文件结束)。
通常,你永远不会遇到这个问题,因为使用这样的东西来读取文件是惯用的:
这个构造不会产生任何未定义的值,因为这将结束循环。
如果你想在到达eof之前结束循环,你可以使用
last
:wn9m85ua2#
的缩写
但是你没有设置
$_
。这一行可能应该是完整的固定代码:
但是仍然有一些问题。我认为你的意思是把
$header = <$z>
放在if语句的“then”部分。修复(并简化):