Just for the sake of completeness, I'll offer one more option - instead of dereferencing the hash reference passed in to new_packages, back into hash %packages, you could just accept the hash reference and use that to refer to your hash elements, like:
sub new_packages {
my $fcount = shift; # use shift instead of $_[0]
my $packages_ref = shift; # use shift instead of $_[1]
print "Found $fcount packages for download: $_\n" if $fcount > 1);
print "Found $fcount package for download: $_\n" if $fcount == 1);
print "Which one would you like to install?:\n";
foreach my $key (keys %{$packages_ref}) {
print "$key) $packages_ref->{$key} \n";
}
}
Of course this code is completely untested, as your code probably was since I saw one or two problems with it.
HTH.