my ($idx, @array, $a_big_num, $some_data);
# Store the data
$idx = map_func($a_big_num);
$array[$idx] = $some_data;
# Fetch the data
$idx = map_func($a_big_num);
$some_data = $array[$idx];
####
my (%hash, $a_big_num, $some_data);
# Store
$hash{$a_big_num} = $some_data;
# Fetch
$some_data = $hash{$a_big_num};
####
sub map_func { return 7 }
####
sub map_func {
state %indexes;
state $idx;
my $a_big_num = shift;
return $indexes{$a_big_num} if exists $indexes{$a_big_num};
die "Ran out of slots!" if keys %indexes > 1000;
return $indexes{$a_big_num}=$idx++;
}