我需要使用Perl对数组成员进行排序,但是如果不使用this答案中提到的Data::Alias
,就无法实现这一点。
是否可以在没有Debian发行版中默认不包含的其他Perl库的情况下实现这一目标?
代码:
use Archive::Zip;
use feature qw(say);
my $zip = Archive::Zip->new();
$zip->read("<PATH_TO_ZIP>");
my $members_ref = $zip->{'members'};
my @members = @$members_ref;
# Not sorted 1st member:
say @members[0]->fileName();
@members = sort { $b->fileName() cmp $a->fileName() } @members;
# Sorted 1st member:
say @members[0]->fileName();
# Should be sorted 1st member if sorted in-place:
say @{$zip->{'members'}}[0]->fileName();
答案 0 :(得分:5)
我不明白你的问题。当然,如果对数组引用进行排序,则可以就地对数组引用进行排序。在程序中,创建数组的副本,并对数组进行排序。原始数组未排序。
以下程序消除了阵列副本并为我工作:
#!perl
use strict;
use warnings;
use Archive::Zip;
use feature qw(say);
my $zip = Archive::Zip->new();
$zip->read("Q:/cygwin_tools.zip");
my $members_ref = $zip->{'members'};
# Not sorted 1st member:
say $members_ref->[0]->fileName();
@$members_ref = sort { $b->fileName() cmp $a->fileName() } @$members_ref;
# Sorted 1st member:
say $members_ref->[0]->fileName();
# Should be sorted 1st member if sorted in-place:
say @{$zip->{'members'}}[0]->fileName();
__END__
cygwin/
cygwin/usr/share/bison.simple
cygwin/usr/share/bison.simple