Perl скрипт для создания двух массивов - PullRequest
0 голосов
/ 18 октября 2011

Ввод: список чисел в командной строке

Вывод: два списка чисел, один с номерами ввода, которые больше нуля, и один с номерами, которые меньше нуля (игнорируя числа с нулевым значением)

вот мой код

#!/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 Script

Ответы [ 4 ]

6 голосов
/ 18 октября 2011

Фигурные скобки для составных операторов не являются обязательными в Perl.

Ваши утверждения:

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

не имеют смысла;Вы, вероятно, просто хотите удалить «++».

Вам не хватает точки с запятой в одном из ваших операторов печати. ​​

Как только вы исправите эти проблемы, вы должны добавить

use strict;
use warnings;

после строки #!.Это введет больше сообщений об ошибках;Вы должны будете исправить это также.Например, вам нужно объявить переменные, используя my().

2 голосов
/ 18 октября 2011

Код, который вы предоставляете, вряд ли скомпилируется.Циклы должны иметь {} вокруг основного блока, массивы лучше создавать с push (или unshift), вы должны использовать строгие и предупреждения, и вы не можете делать приращения одновременно с назначениями (например, * 1004)*).

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";
2 голосов
/ 18 октября 2011

Я не знаю, что должно означать $i++ = 0, но измените его на $i = 0 для инициализации переменных.

Кроме того, первое, что yuu должен сделать в цикле while, это вызов chomp($number) для удаления ложных символов новой строки - 5\n - это не число, а трактовка его как единственного путаницы в perl.

Как только вы это исправите, опубликуйте все новые ошибки, которые появляются - я не вижу никакихдругие проблемы, хотя.

0 голосов
/ 18 октября 2011

Как вы выполняете этот 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 вместо того, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...