2011-10-18 58 views
0

輸入:編號的命令行上的列表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; 

我得到它我不能夠rectify.The錯誤有以下幾種錯誤傻

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

有人能幫我解決這些錯誤嗎?我是新來的Perl腳本

+0

對於是否要從命令行參數中讀取數字(即'./test.pl 1 2 3 4')或從命令行中給出的文件(您的代碼當前所做的)如果沒有給出文件,則使用標準輸入。 –

+0

我想給從命令行輸入的數字 – gogo

回答

2

您提供的代碼很難編譯。在主塊周圍應該有{},使用push(或unshift)可以更好地創建數組,您應該使用strict和warnings,並且不能與賦值同時進行增量(例如$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"; 
+0

如何通過命令行執行此操作? lik ./divide.pl -1 1 2 3 4 – gogo

+0

用'(@ARGV)'替換'while()'。如果你這樣做,你可以刪除'chomp'。 – TLP

+0

非常感謝。這篇文章幫助我實現了我所需要的。 :) – gogo

2

我不知道$i++ = 0應該是什麼意思,但改爲$i = 0初始化變量。

此外,第一件事應該優在while循環要做的就是調用chomp($number)刪除虛假換行符 - 5\n不是一個數字,並把它當作一個會混淆的Perl。

修復後,發佈任何顯示的新錯誤 - 雖然我沒有看到任何其他問題。

+0

divide.pl:2:=:找不到 divide.pl:3:=:找不到 我得到這些錯誤nw以及「」的語法錯誤「 – gogo

6

複合語句中的大括號在Perl中不是可選的。

您的語句:

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

沒有意義;你可能只想刪除「++」。

您在其中一個打印語句中缺少分號。

一旦你有固定的問題,您應該在#!行後添加

use strict; 
use warnings; 

。這將引入更多的錯誤消息;您還需要修復這些問題。例如,您需要使用my()來聲明變量。

+0

但它不能識別「使用」。給出錯誤說使用未找到 – gogo

+2

「給出錯誤說找不到使用」不是我熟悉的perl錯誤文本。也許你應該做一個確切的引用而不是解釋。 – TLP

+0

您是否在「#!」的同一行添加了「使用」?不要這樣做。第1行:'#!/ usr/bin/perl'。第2行:'嚴格使用;'。第3行:'使用警告;'。 (我通常在'#!'後面有一個空行,但這並不重要。) –

0

你是怎麼執行這個perl腳本的?超出了代碼本身提到的錯誤。看起來您正在嘗試使用dash而不是perl來評估代碼。

你應該如果你是用Perl執行它來看到的錯誤是這樣的:

不能修改後置(++)在/ tmp目錄/ foo的標量分配。第2行,接近「0」的第 行

而是你的錯誤更符合什麼dash輸出:

$破折號/tmp/foo.pl

/tmp/foo.pl:2:++:沒有找到

/tmp/foo.pl:3:++:未發現

一旦您確認您正在運行你正確的Perl腳本,你可以開始工作,通過其他人提到你的代碼的問題。最簡單的方法是通過perl divide.pl來運行它,而不是你正在做的任何事情。