#!/usr/bin/perl # http://perlmonks.org/?node_id=1185923 use strict; use warnings; my @array1 = ("one", "two", "three", "four", "five"); my @array2 = ("banana", "pear", "apple"); my %hash = ( numbers => \@array1, fruit => \@array2 ); # make a reverse lookup hash my %reverse; for my $key (keys %hash) { push @{ $reverse{$_} }, $key for @{ $hash{$key} }; } # then do direct lookup ( you may get multiple values, or none ) print "banana -> @{ $reverse{'banana'} // [] }\n";