嘿伙计们,所以我的作业是"Print all records that do not list a discoverer in the eighth field."
我们收到一个包含此信息的文件:这是我的一些信息:
Umbriel II Uranus 266000 4.14 0.00 0.00 Lassell 1851
Uranus VII Sun 2870990000 30685.00 0.77 0.05 Herschel 1781
Venus II Sun 108200000 224.70 3.39 0.01 - -
所以这是我目前的代码:
#!/usr/bin/perl
use warnings;
use strict;
while (my $line = <STDIN>) {
my @field = split(/\s+/, $line);
my $discover = $field[7];
if ($discover eq '- -') {
print "\$discover\n";
}
}
我收到此错误:
Use of uninitialized value $discover in string eq at ./ss123 line 7, <STDIN> line 2.
我不确定我做错了什么,感谢你的帮助。谢谢。
答案 0 :(得分:0)
如果您正确搜索非值,这是微不足道的。由于您在空格上进行拆分,因此您永远不会将- -
作为结果数组的单个元素。在下面的代码中,我将Data :: Dumper缩进级别增加到3,它显示了每个元素旁边的数组索引(有助于调试)。
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Indent = 3;
while (<DATA>) {
my @fields = split;
if ($fields[7] eq '-') {
print Dumper(\@fields);
}
}
__DATA__
Umbriel II Uranus 266000 4.14 0.00 0.00 Lassell 1851
Uranus VII Sun 2870990000 30685.00 0.77 0.05 Herschel 1781
Venus II Sun 108200000 224.70 3.39 0.01 - -
输出:
$VAR1 = [
#0
'Venus',
#1
'II',
#2
'Sun',
#3
'108200000',
#4
'224.70',
#5
'3.39',
#6
'0.01',
#7
'-',
#8
'-'
];