2013-05-04 79 views
1

我想用下面的代碼片斷進行排序散列引用數組:排序散列數組引用

@order = sort { $VAR1->[$a]->{'tom'} <=> $VAR1->[$b]->{'tom'} } @$VAR1}; 

$VAR1結構如下:

$VAR1 = [ 
      { 
      'tom' => '2.5', 
      'color' => 'Johnson', 
      'book' => 'ANSA', 
      'dog' => 19 
      }, ... 

這是我的錯誤m得到它時,它排序:

Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of reference "HASH(0xa91cd8)" as array index at part2.pl line 47. 
Use of reference "HASH(0xa91d68)" as array index at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of reference "HASH(0xa91df8)" as array index at part2.pl line 47. 
Use of reference "HASH(0xa91e88)" as array index at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of reference "HASH(0xa91f18)" as array index at part2.pl line 47. 
Use of reference "HASH(0xa91fa8)" as array index at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of reference "HASH(0xa92038)" as array index at part2.pl line 47. 
Use of reference "HASH(0xa920c8)" as array index at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of reference "HASH(0xa92158)" as array index at part2.pl line 47. 
Use of reference "HASH(0xb9a2c0)" as array index at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47. 

我的問題是:什麼是正確的語法使用排序?爲了完成這個任務,我需要grep還是映射任何東西?

謝謝!

回答

1

這是訣竅!

   @order = sort {$a->{'tom'} <=> $b->{'tom'}} @$VAR1; 
       foreach (@order) { 
         print "$_->{color}"; 
       } 
+0

爲什麼不解釋什麼是錯的呢?你的語法很好,但是如果你將一個索引數組排序到@ $ VAR1而不是@ $ VAR1的元素,那麼排序的主體纔有意義。 – 2013-05-04 03:19:40

+0

你不需要引用你給[print](http://perldoc.perl.org/functions/print.html「perldoc -f print」)的變量。對於這樣一個簡單的循環,我會寫它:'print {_-> {color},\ n「for @order;'' – 2013-05-06 17:23:54

4

你可以寫任何

my @order = sort { $VAR1->[$a]{tom} <=> $VAR1->[$b]{tom} } 0 .. $#$VAR1; 

獲得指標的排序列表爲@$VAR,或

my @order = sort { $a->{tom} <=> $b->{tom} } @$VAR1; 

得到的@$VAR1在排序順序的元素。