|Think about Loose Coupling|
It is both possible and common for bad Perl to arise out of fixable incompetence. In which case you fix the cause of the incompetence, and you stop seeing so much bad Perl.
Hmm... how does "fixable incompetence" differ from simple ignorance? Incomptentence, to me, implies an inability or outright refusal to learn competent behaviour.
For instance the person programming may not have a programming background, and so has never learned the value of good variable names, when to use functions, and so on.
In which case, the incompetence lies as much with HR as with the so called "progammer". Only hire people who can do the job you require of them; if you need to train them on the job, budget the time and resources for it!
Or the person has just been exposed to a whole lot of neat things and wants to use them all at once. A little more experience and this enthusiasm likely will get tempered to more manageable levels.
A professional does what is good for his client, not just what's fun for himself. This lesson should be learned long before reaching the workplace, IMHO. Refusing to learn it does smack of incompetence, to me.