I really like everything you have to say with one major exception.
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. 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. 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. And so on.
I am not saying that every producer of bad code is educable. But enough are that it is worth at least making the attempt.