use strict; use warnings; use Data::Dump qw/pp dd/; my $h_orig = { '/a/b/c/dt/data/SUSE/tool/0.9.0' => '/a/b/c/dt/tools/SUSE/tool/0.9.0', '/nfs/us/tools/SUSE12' => '/usr/bin', '/a/b/c' => '/p' }; my $pattern = join "|", map quotemeta, keys %$h_orig; my %copy = %$h_orig; s/^($pattern)/$h_orig->{$1}/g for values %copy; pp $h_orig, \%copy;