输入:命令行上的数字列表
输出:两个数字列表,一个输入数字大于零,另一个数字小于零(忽略零值数字)
这是我的代码
#!/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脚本的新手
答案 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
而不是你正在做的任何事情来运行它。