如何使用perl进行多重排序?

时间:2011-12-16 22:16:28

标签: perl

我有这个片段,它对值进行排序,例如Title2 2005; Title2 1998; Title3 1994;等十年,并且工作完美无缺。但是我需要对已经排序的几十年进行额外的排序 - 首先按数字递减,然后按字母顺序递增。如果我使用second_sort子例程,我会收到错误'无法通过包找到对象方法'。我的代码中是否有一个小错误,或者我的逻辑是完全错误的,我应该寻求另一种方法。

感谢。

use autodie;
use strict;
use warnings;
use HTML::TreeBuilder;


my %sort = ();
push (@{$sort{$decade}}, $t );

for my $decade ( sort { $b <=> $a } keys %sort ) {

    my @td = map { $_->as_HTML("<>&","\t",{}) }  second_sort( @{$sort{$decade}} );
}

sub second_sort {
    my @sorted = map { @$_ }
            sort {  $b->[1] <=> $a->[1] || lc $a->[0] cmp lc $b->[0]  }
            map {
                my ($title, $year) = ($_->as_trimmed_text =~ /(.*?)\((\d+)\).*/);
                [$title, $year];
                } @_;
    return @sorted;
}

1 个答案:

答案 0 :(得分:1)

您似乎缺少使用HTML :: Element模块来提供'as_trimmed_text'。