用于创建两个数组的Perl脚本

时间:2011-10-18 18:25:50

标签: perl

输入:命令行上的数字列表

输出:两个数字列表,一个输入数字大于零,另一个数字小于零(忽略零值数字)

这是我的代码

#!/usr/bin/perl
$i++ = 0;
$j++ = 0;

while ($number = <>)
 {
        if($number<0)
          $first[$i++]=$number;
        else
          $second[$j++]=$number;

 }

 print "The numbers with value less than zero are\n";

  foreach $number (@first)
     print $number;
print "The numbers with value greater than zero are\n"

  foreach $number(@second)
     print $number;

我收到以下愚蠢的错误,我无法纠正。错误是

divide.pl: 2: ++: not found
divide.pl: 3: ++: not found
divide.pl: 5: Syntax error: ")" unexpected

有人可以帮我纠正这些错误吗?我是perl脚本的新手

4 个答案:

答案 0 :(得分:6)

复合语句的大括号在Perl中不是可选的。

您的陈述:

$i++=0;
$j++=0;

没有意义;你可能只想删除“++”。

您的某个打印报表上缺少分号。

修复这些问题后,您应该添加

use strict;
use warnings;

#!行之后。这将引入更多错误消息;你也需要解决这些问题。例如,您需要使用my()声明变量。

答案 1 :(得分:2)

我不知道$i++ = 0应该是什么意思,但将其更改为$i = 0以初始化变量。

此外,yuu应该在while循环中执行的第一件事是调用chomp($number)以删除虚假换行符 - 5\n不是数字,将其视为一个会使perl感到困惑。

一旦你修复了它,发布任何出现的新错误 - 我没有看到任何其他问题。

答案 2 :(得分:2)

您提供的代码很难编译。循环应该在主块周围{},使用push(或unshift)更好地创建数组,你应该使用严格和警告,并且你不能同时进行增量作为作业(例如$i++ = 0)。

use v5.10;
use strict;
use warnings;

my (@first, @second);

while (<STDIN>) {  # <STDIN> clearer than <> in this case
    chomp;
    if ($_ < 0) {
        push @first, $_;
    } elsif ($_ > 0) {
        push @second, $_;
    }
}

say "Numbers less than zero:";
say "@first";
say "Numbers greater than zero:";
say "@second";

答案 3 :(得分:0)

你是如何执行这个perl脚本的?除了提到的关于代码本身的错误。您似乎正在尝试使用dash而不是perl来评估代码。

如果使用Perl执行它,您应该看到的错误如下:

  

无法在/tmp/foo.pl中修改标量赋值中的postincrement(++)   第2行,靠近“0;”

但相反,您的错误更符合dash输出的内容:

  

$ dash /tmp/foo.pl

     

/tmp/foo.pl:2:++:not found

     

/tmp/foo.pl:3: ++:not found

一旦您确认自己正在运行perl脚本,就可以开始解决人们提到代码的其他问题。最简单的方法是通过perl divide.pl而不是你正在做的任何事情来运行它。