$hash{/abc_(.*)_ghi/} = boom_$1 #### use Data::Dumper; my %hash = ( xxx_text10_yyy => 1, xxx_text11_yyy => 1, mmm_text12_nnn => 1, mmm_text13_nnn => 1, abc_text6_ghi => 1, abc_text7_ghi => 1, abc_text8_ghi => 1, abc_text9_ghi => 1 ); print Dumper(\%hash); foreach my $key (keys %hash) { $hash{$key} = "boom_$1" if ($key =~ /abc_(.*)_ghi/); $hash{$key} = "doom_$1" if ($key =~ /mmm_(.*)_nnn/); } print Dumper(\%hash);