不知道在哪里修复perl basic

不知道在哪里修复perl basic,perl,Perl,这就是问题所在 编写一个Perl程序,在solar.txt文件上完成以下每一项(请参阅类主页上的链接) 打印第八个字段中未列出发现者的所有记录 删除第二个字段后打印每条记录。注意:最好说“打印每条记录”,忽略第二个字段 打印轨道周期为负的卫星的记录。(负轨道周期只是指卫星沿逆时针方向运行。) 打印旅行者2号太空探测器发现的物体的数据 打印每条轨道周期记录,以秒为单位,而不是以天为单位 关于solar.txt文件: 此文件包含9个项目的行,第一个是: Adrastea XV Jupiter 129

这就是问题所在

编写一个Perl程序,在solar.txt文件上完成以下每一项(请参阅类主页上的链接)

  • 打印第八个字段中未列出发现者的所有记录

  • 删除第二个字段后打印每条记录。注意:最好说“打印每条记录”,忽略第二个字段

  • 打印轨道周期为负的卫星的记录。(负轨道周期只是指卫星沿逆时针方向运行。)

  • 打印旅行者2号太空探测器发现的物体的数据

  • 打印每条轨道周期记录,以秒为单位,而不是以天为单位

  • 关于solar.txt文件:

    此文件包含9个项目的行,第一个是:

    Adrastea XV Jupiter 129000 0.30 0.00 0.00 Jewitt 1979
    
    按行星或月球名称的字母顺序排列(第一个字段)

    []中的文本是上一行的相应字段

    此文件中的字段包括:

  • 行星或月球的名称[Adrastea]

  • 月球或行星的数量(罗马数字)[XV]

  • 卫星环绕[木星]轨道运行的物体的名称

  • 轨道半径(半长轴)以公里为单位[129000]

  • 轨道周期(天)[0.30]

  • 轨道倾角,单位为度[0.00]

  • 轨道偏心率[0.00]

  • 发现者[杰维特]

  • 发现年份[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);
    
    #/usr/bin/perl
    使用警告;
    打开(文件,“你说:

    open(FILE, "<solar.txt") or die "Can't open file, $!";
    
    您希望以前未声明、未初始化的
    $文件中包含什么内容

    后来:

    my @tmp = split(/ /, FILE);
    
    在这里,您试图
    拆分
    一个文件句柄。这不是您想要的

    在这两种情况下,您都需要
    $\uuu
    (在最近的
    调用中读取的行)

    因此:

    但是自从():

    如果只给出模式,则EXPR默认为
    $\uuu

    你可以说:

    my @tmp = split(/ /);
    

    您需要
    使用strict;
    在您的文件顶部我尝试了这个方法,但出现了新的错误,在使用“strict subs”时不允许使用裸字“FILE”……我使用的是DWIM Perl 5.14.2.1(v7)这一个。您的第一个
    while()
    loop读取整个文件。第二个循环不读取任何内容,因为整个文件已被读取。当有人指出问题的原因时,请不要更改问题中的代码。这会让将来访问此页面的访问者感到困惑;他们会看到一个问题,上面写着“我在做Y,为什么它不起作用?”然后回答说“你在做X,你应该做Y。”谢谢,在我修正后,我的结果会好一点,但仍然有错误,并说使用未初始化值$tmp[7]在字符串等式中,你能在没有看到输入数据的情况下帮我做这一行吗?不是真的。你确定数组中有8项吗?(
    [0..7]
    )行
    my$tmp=split(//);
    应该是
    my@tmp=split(//);
    最后一行
    print“$tmp\n”
    应该是
    print”@tmp\n“;
    和Keith T.关于第一个
    while()
    循环吞噬整个文件的说法是正确的。其他
    while()
    循环都不会读取任何内容。
    my @tmp = split(/ /, $_);
    
    my @tmp = split(/ /);