As far as identifying them goes, you could grep your files for ${%{$ . That sequence of characters isn't likely to show up anywhere else except in these constructs.
Automating a change would be more tricky, but could probably be done. Something like this which you could filter all problem files through:
#!/usr/bin/env perl
use strict; use warnings;
while(<DATA>){
print "before: $_";;
s|\${%{\$(\w+)}}{'(\w+)'}|\$${1}->{'$2'}|g;
print " after: $_";;
}
__DATA__
my $lValue = ${%{$lHashRef}}{'a'};
That might not work on all your variable names or if some are formatted a bit differently, but it could be a start.
Aaron B.
Available for small or large Perl jobs and *nix system administration; see my home node.