Сортировать Архив :: Zip члены на месте - PullRequest
0 голосов
/ 08 января 2019

Мне нужно отсортировать элементы массива на месте, используя Perl, но я не могу добиться этого без использования Data::Alias, как указано в этом ответе.

Возможно ли достичь этого без дополнительных библиотек Perl, которые по умолчанию не включены в дистрибутив Debian?

Код:

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 голосов
/ 08 января 2019

Я не понимаю твою проблему. Конечно, вы можете сортировать ссылку на массив на месте, если вы сортируете ссылку на массив. В вашей программе вы создаете копию массива и сортируете этот массив. Исходный массив остается несортированным.

Следующая программа удаляет копию массива и работает для меня:

#!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

Список литературы Краткое руководство

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...