当我运行此脚本时:
SQL
然后我收到此错误:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
my @header = split ' ', <>;
my $last = q();
my @keep;
for my $i (0 .. $#header) {
my ($prefix) = $header[$i] =~ /(.*)\./;
if ($prefix eq $last) {
push @keep, $i + 1;
}
$last = $prefix;
}
unshift @header, q();
say join "\t", @header[@keep];
while (<>) {
my @columns = split;
say join "\t", @columns[@keep];
}
你能指导我如何摆脱这个错误吗? 我应该改变数据文件吗?因为在小数据文件中运行此脚本时,我不会收到错误。但是当我运行它是我的真实数据文件时,我收到错误。
答案 0 :(得分:3)
数组切片@columns[@keep]
的至少一个元素是undef
您的文件末尾可能有一个空行。看一下输入文件的第3986行
我建议你改变你的最后一个循环,跳过不包含非空格字符的行
while (<>) {
next unless /\S/;
my @columns = split;
if ( $keep[-1] > $#columns ) {
warn "Malformed data at input file line $.\n";
next;
}
say join "\t", @columns[@keep];
}