Since you may not be familiar with this type of assignment, I just wanted to clarify something about this line:
my ( $top_entry, @entries ) = @_;
The order of scalar vs array is really important. For example:
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
my @original = qw(a b c d);
my ( $first_item, @the_rest ) = @original;
say "First item: $first_item";
say "The rest: @the_rest";
my ( @array_first_bad, $last_item ) = @original;
say "Array first is bad: @array_first_bad";
say "Last item: $last_item";
__END__
First item: a
The rest: b c d
Array first is bad: a b c d
Last item:
Use of uninitialized value $last_item in concatenation (.) or string a
+t line 16.