分类存档:: Zip成员就地

时间:2019-01-08 06:30:07

标签: perl

我需要使用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();

1 个答案:

答案 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

另请参见

perlreftut

References Quick Reference