Naming files with the type in the extension is good (or at least tolerable until better ways are supported), however executables (and that includes perl scripts, shell scripts, and even sed scripts) should have no file name extension. Well, all executables should have the same extension, and having it be nothing (and dropping the . too) is customary and will save you a lot of typing in the long run.

Why, you ask? Say you've written a simple bourne shell script that somehow conjures up a magic value. You've called it /usr/local/bin/magicmaker.sh, and all is well with the world. People like your magic values, and your script's popularity skyrockets. People are using it from their interactive shells, but also from other scripts, CGIs, crontabs, etc. In fact, the script is so popular it's bogging the system down, due to being wildly inefficient. So, you decide to rewrite what was once a dirty hack, but bourne shell is just too primitive for what you want, so you use perl. An hours work later, you've halved execution time and quartered memory usage, and you're happy with your work. But what are you going to save it as? /usr/local/bin/magicmaker.sh? A perl script ending in .sh? That's silly. /usr/local/bin/magicmaker.pl? But everyone's scripts, crontabs and habits will have to be changed.

Since the interface of the program doesn't change when you change the language it's written in, and that's what matters for those accessing it, the extension for all executables should be the same.

This of course fails to address people whose scripts read your scripts to extract data.