用于创建两个数组的Perl脚本
输入:命令行上的数字列表 输出:两个数字列表,一个输入数字大于零,一个输入数字小于零(忽略零值数字) 这是我的密码用于创建两个数组的Perl脚本,perl,Perl,输入:命令行上的数字列表 输出:两个数字列表,一个输入数字大于零,一个输入数字小于零(忽略零值数字) 这是我的密码 #!/usr/bin/perl $i++ = 0; $j++ = 0; while ($number = <>) { if($number<0) $first[$i++]=$number; else $second[$j++]=$number; } print "The numbe
#!/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;
有人能帮我纠正这些错误吗?我对perl脚本不太熟悉,我不知道
$I++=0
应该是什么意思,但是把它改成$I=0
来初始化变量
另外,在while循环中,yuu应该做的第一件事是调用chomp($number)
来删除虚假的换行符-5\n
不是一个数字,将其视为一个会混淆perl
一旦修复了这个问题,就发布出现的任何新错误-不过我看不到任何其他问题。在Perl中,复合语句上的大括号不是可选的 你的发言:
$i++=0;
$j++=0;
没有道理;您可能只想删除“++”
您的一条打印语句缺少分号
一旦解决了这些问题,您应该添加
use strict;
use warnings;
在
#之后代码>行。这将引入更多错误消息;您还需要修复这些问题。例如,您需要使用my()
声明变量。您提供的代码很难编译。循环应该在主块周围有{}
,使用push
(或unshift
)更好地创建数组,应该使用strict和warning,并且不能在赋值的同时进行增量(例如$i++=0
)
使用v5.10;
严格使用;
使用警告;
我的(@第一,@第二);
虽然()比这个例子更清楚
咀嚼;
如果($小于0){
按@first,$\;
}elsif($\uu0>0){
按@秒,$\;
}
}
说“数字小于零:”;
说“第一”;
说“大于零的数字:”;
说“秒”;
如何执行此perl脚本?除了代码本身提到的错误之外。看起来您正在尝试使用dash
而不是perl
来评估代码
如果使用Perl执行,应该看到的错误如下:
无法在/tmp/foo.pl处修改标量赋值中的后增量(++)
第2行,靠近“0”
但是,您的错误更符合dash
输出:
$dash/tmp/foo.pl
/tmp/foo.pl:2:++:未找到
/tmp/foo.pl:3:++:未找到
一旦验证了perl脚本是否正常运行,就可以开始解决人们提到的代码中的其他问题。最简单的方法是通过perl divide.pl
运行它,而不是执行任何操作。divide.pl:2:=:not found divide.pl:3:=:not found我收到了这些错误,还有语法错误“)”您不太清楚是否要从命令行参数读取数字(即/test.pl 1 2 3 4
)或从命令行上给定的文件(您的代码当前所做的),如果没有给定文件,则使用标准输入。我想从命令行中输入数字,但它不标识“use”。给出一个错误,表示use not found“给出一个错误,表示use not found”不是我熟悉的任何perl错误文本。也许你应该做一个准确的引用而不是解释。你是否在!
的同一行添加了“use”?不要这样做。第1行:!/usr/bin/perl
。第2行:使用strict;
。第3行:使用警告;
。(我通常在#!
后面有一个空行,但这并不重要。)我如何通过命令行来完成这项工作?比如/divide.pl-1 2 3 4用(@ARGV)
的替换while()
。如果你这样做,你可以删除chomp
。非常感谢。这篇文章帮助我实现了我所需要的功能。:)@ GGOO,你也可以考虑使用<代码>()<代码>,并使用一个具有适当编号的文件,用NeXLIN分隔。如果你不给Perl脚本提供参数,这也将与STDIN一起工作。@ GGOO哦,注意到你想要忽略零值。然后你需要做代码> ELSIF($> 0)。
而不是else
。因为否则else
隐式表示elsif($\u>=0)
。
use strict;
use warnings;
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";