Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于创建两个数组的Perl脚本_Perl - Fatal编程技术网

用于创建两个数组的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";