use strict; use warnings; use Data::Dumper; my %hash = ("NETWORK1" => "A", "NETWORK2" => "B", "TYPE1" => "C", "TYPE2" => "D"); my %hashslice1 = map { /^NETWORK/ ? ($_,$hash{$_}) : () } keys %hash; print Dumper(\%hashslice1); my %hashslice2 = map { /^TYPE/ ? ($_,$hash{$_}) : () } keys %hash; print Dumper(\%hashslice2);