在perl中映射和排序文件数组

时间:2013-03-07 16:53:49

标签: perl map sorting

我有这样的文件数组,如下所示:

my @html_pages_files = ("html.17", "html.9", "html.0", "html.10");

我会在排序部分之后放置文件的扩展名。基本上文件名是/html.\d/。问题是我正在尝试使用map和sort函数对其进行排序:

map { $_->[1] }
  sort { $a->[0] <=> $b->[0] }
     map { /html\.(.*)/; [$1, $_] }
        @html_pages_files;
print "@html_pages_files\n";

但输出仍与原始数组相同。我一步一步跟着@Chas。欧文斯在这里回答:Using Perl, how can I sort an array using the value of a number inside each array element?。请注意,我对perl很新,所以我没有得到所有细节。

有人出错的地方吗? 谢谢!!!

2 个答案:

答案 0 :(得分:6)

您永远不会保存已排序的结果!

@html_pages_files =
   map { $_->[0] }
    sort { $a->[1] <=> $b->[1] }
     map { /html\.(.*)/; [$_, $1] }
      @html_pages_files;

(为了保持一致性,我总是将整个字符串放在数组的第一个元素中。)

答案 1 :(得分:4)

您的排序逻辑看起来是正确的,但您没有将操作的结果分配给任何内容,因此您不会更改@html_pages_files。尝试

@html_pages_files = map {$_->[1] } 
                    sort {$a->[0] <=> $b->[0]} 
                    map {/html\.(.*)/; [$1, $_]} @html_pages_files;