2011-02-28 100 views
-3

試圖對簡單數組,我得到一個錯誤...... 的錯誤寫着:「使用數值比較未初始化值(< =>)在file.pl行#」在Perl中排序數組?

#!/usr/bin/perl 
use strict 
use wardings 
use Data::Dumper 
my @array 
my $array 
$array[1]= 5 
$array[2]= 2 
$array[3]= 3 
$array[4]= 4 
$array[5]= 1 
sub numerically {$a <=> $b} 
my @sortedarray = sort numerically @array; 

print "@sortedarray\n"; 

我我只是想對數組進行排序,以獲得:

1 2 3 4 5 

我是新的perl處所以這可能只是一些愚蠢的事,但請幫我...謝謝

+7

您應該始終發佈您正在運行的確切代碼。由於其他大量語法錯誤,該代碼不會生成您提到的警告。 – toolic 2011-02-28 22:48:24

+2

下面有很多好的建議。然而,由於給定的代碼與生成警告的代碼不同,所以錯誤的確切原因不能完全給出(請參閱工具的註釋)。更多的努力有問題 - >更好的回覆(並減少反對票:-) – 2011-02-28 23:14:52

回答

7

數組索引的從0開始。錯誤來了從未定義時嘗試對數組進行排序。

更新:另外,在Perl中,一個會寫:

#!/usr/bin/perl 
use strict; 
use warnings; 
use Data::Dumper; 
my @array = qw(1 2 3 4 5); 
sub numerically {$a <=> $b} 
my @sortedarray = sort numerically @array; 

print "@sortedarray\n"; 

有一個在宣佈$array毫無意義 - 這將是一個標量。您只使用數組@array,即使它是使用$調用的。請閱讀perl文檔。

+2

@array任務失蹤也許是QW,或者可能是一些逗號? – 2011-02-28 22:08:32

+1

他們只從0開始理智 - 但是,我會刺傷任何人讓我記住'$ ['...啊哈,該死的。現在我需要刺傷自己。 – 2011-02-28 23:10:08

+0

@馬丁:當然,謝謝。 – Tim 2011-03-01 08:51:49

3

你錯過了一大堆分號。

這是warnings,而不是wardings

元素0在您的數組中未定義。

+0

我只是很快輸入我的(不復制和粘貼)...因此wardings。謝謝你 – dewalla 2011-02-28 22:13:11

+2

該死的,現在我想要一個「wardings」雜注!不幸的是,我不能確定它應該做什麼......(禁用像'$ ['這樣的黑魔法將是一個好的開始,但也可能阻止該進程成爲守護進程?) – 2011-03-01 12:12:06

4

首先,你需要在每個語句結尾處使用分號。其次,你沒有使用Data :: Dumper,那你爲什麼要包含它?你也不需要聲明子:

#!/usr/bin/env perl 
use strict; 
use warnings; 

my @sorted = sort {$a <=> $b} qw (4 2 3 1 5); 
print "@sorted\n"; 

而我們就有它了。

+0

+1爲了如此簡潔/簡單。 – 2011-02-28 23:11:51

+0

@BuffFileMagic,不,你不需要聲明一個子,但是如果你打算以同樣的方式排序很多東西,它可以是一個很好的技巧 – 2011-02-28 23:38:05

+1

@Joel - 我原則上同意,但在這種簡單的情況下這是一個直接的比較,有一個子程序的名字比這個塊長一些是過分殺死的。 – BadFileMagic 2011-02-28 23:58:22