#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @sel_keys = qw/red green/; my %hash_source = ( red => '#ff0000', green => '#00ff00', blue => '#0000ff', ); my %hash_target = hashAssignByKeys(\%hash_source, @sel_keys); print Dumper \%hash_target; exit; sub hashAssignByKeys { my ($source, @keys) = @_; map { $_, $source->{$_} } grep { exists $source->{$_} } @keys; }