If you want to be forced into the habit of using higher-level constructs, just maybe perl isn't the right language to do that, since it doesn't really force you to do anything you don't want.
Have you considered using some other high-level language that more or less forces you to disregard C-like ugliness and makes you work with map/grep-type functional constructs? Something like scheme/lisp may work well.
I'm not suggesting you'd use it instead of perl (though you may prefer it), but using it for a while should in the very least open your head to the possibilities and much many of the techniques used in lisp/scheme can be used in perl too.
Since you're a programmer with some experience this book - with full text available online should give you enough information to get started with common lisp. Can't really recommend any scheme books, since I haven't read any.