##
my @ids = ...;
my %foo;
@foo{@ids} = foo(@ids);
##
##
sub zip {
my ($x, $y) = @_;
map { $x->[$_], $y->[$_] } 0 .. max($#$x, $#$y);
}
my @ids = ... ;
my %foo = zip(\@ids => [ foo(@ids) ]);
##
##
my @ids = ... ;
my @foo = map foo($_) => @ids;
my %foo = map { $_ => foo($_) } @ids;