in reply to Basic help with mapping

The main question is whether you want to make a copy of your original structure or simply to modify it in place. If you're going for the modify approach, then you really shouldn't use map I feel because map conveys the sense of returning a list of something. But you can make your for loop a bit more concise:
for (@$AoH_orig) { $_->{title} =~ s/-/_/g; }
If you do want to make a copy, then you should really make it a deep copy because otherwise your two arrays will really be identical, since they have the same references in them. For this you can use map:
my $AoH_new = [ map { my %tmp = %$_; $tmp{title} =~ s/-/_/g; \%tmp } @ +$AoH_orig ];
The key points here are a) I am calling map in list context and returning the result as an array reference, since that's what you want $AoH_new to be (otherwise you'd have to make it a real array like @AoH_new) and b) I need to actually copy the hash for each element in order to make a completely new structure.