这是问题
编写一个Perl程序来完成solar.txt文件中的以下每一项(见课程主页上的链接)
在第八个字段中打印未列出发现者的所有记录。
删除第二个字段后打印每条记录。注意:最好说"打印每条记录"省略第二个字段。
打印具有负轨道周期的卫星的记录。 (负轨道周期只是意味着卫星沿逆时针方向运行。)
打印Voyager2空间探测器发现的对象的数据。
以轨道周期打印每条记录,而不是几天。
关于solar.txt文件:
此文件包含9个项目的行,第一个是:
Adrastea XV Jupiter 129000 0.30 0.00 0.00 Jewitt 1979
按行星或月亮的名称(第一个字段)按字母顺序排列。
[]中的文字是上面一行中的相应字段。
此文件中的字段为:
行星或月球名称[Adrastea]
月球或行星的数量(罗马数字)[XV]
卫星绕轨道运行的名称[木星]
轨道半径(半长轴),以千米为单位[129000]
以天为单位的轨道周期[0.30]
轨道倾角度[0.00]
轨道偏心率[0.00]
Discoverer [Jewitt]
发现年份[1979]
我的代码是
#!/usr/bin/perl
use warnings;
open(FILE, "<solar.txt") or die "Can't open file, $!";
while(<FILE>) {
my $tmp = split(/ /, $file);
if($tmp[7] eq '-') {
print "@tmp";
}
}
while(<FILE>) {
splice(/ /, 1, 1);
print "FILE\n";
}
while(<FILE>) {
my @tmp = split(/ /, FILE);
if($tmp[4] < 0) {
print "@tmp\n";
}
}
while(<FILE>) {
my @tmp = split(/ /, FILE);
if($tmp[7] eq 'Voyager2') {
print "@tmp\n";
}
}
while(<FILE>) {
my @tmp = split(/ /, FILE);
@tmp = $tmp[4] * 24 * 60 * 60;
print "$tmp\n";
}
close(FILE);
当我尝试运行它时,它表示使用未初始化的值错误。 但我不知道在哪里修理。请帮帮我。
答案 0 :(得分:1)
你说:
open(FILE, "<solar.txt") or die "Can't open file, $!";
然后:
my $tmp = split(/ /, $file);
您对以前未声明的,未初始化的$file
期待什么?
后来:
my @tmp = split(/ /, FILE);
这里你试图split
一个文件句柄。那不是你想要的。
在这两种情况下,您确实需要$_
(在最近<FILE>
次来电中读取的行。)
所以:
my @tmp = split(/ /, $_);
但是(q.v.):
如果仅给出PATTERN,则EXPR默认为
$_
。
你可以说:
my @tmp = split(/ /);