2011-02-28 101 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