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++; }