【发布时间】:2015-12-17 05:00:17
【问题描述】:
大家好,我的作业是"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.
我不确定我做错了什么,我们将不胜感激,谢谢。
【问题讨论】:
-
您的第 12 行有错字。它应该是
my $discover = $field[8];(这一行还有另一个错误)。也就是说,该程序将无法使用该修复程序。你应该阅读更多关于编程的内容。例如在这里寻找数组:tutorialspoint.com/perl/perl_arrays.htm。还要想想当你做分配时$nfield会是什么。你为什么这样做?if语句的用途是什么,为什么它不起作用? -
我已将其更改为:while (my $line =
) { my @field = split(/\s+/, $line);我的 $field = @field;我的 $discover = $field[8]; if ($discover == "- -");打印 "\$discover\n";我正在使用 if语句,因为如果第八个字段没有任何内容,那么将打印这些内容。 @bolav -
请创建一个minimal reproducible example。描述你的测试数据是不够的;如果您希望收到高质量的答案,我们需要实际看到它。此外,第八个字段将是数组索引 7,因为 Perl 数组是 0 索引的。而且,这将是了解字符串与数字 comparison operators 的好时机。
-
你认为
my $field = @field;是做什么的? (提示:它在您的程序中没有任何用处。)您是否使用了正确的比较运算符? (提示:去了解==和eq之间的区别。)你读过Perl 的if修饰符或if语句的语法规则吗? (提示:你应该这样做;你所拥有的不是任何一个,而是导致语法错误。) -
您可以删除 'use strict' 和 while 循环之间的所有内容。无论如何,您都在重新声明这些变量,以及
行。此外,您可能会遇到这些错误,因为您的行没有至少 8 个字段。
标签: perl