Perl While循环/仅打印特定数据/未初始化的值

时间:2015-12-15 22:52:57

标签: perl

嘿伙计们,所以我的作业是"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.

我不确定我做错了什么,感谢你的帮助。谢谢。

1 个答案:

答案 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
          '-'
        ];