Don't get me started (too late). The problem often is that shell programmers do not know enough about the shell they are using. cat(1) is an example, it is rairly required in shell scripts but often used, as is `ls` to get a list of files instead of using globbing. I could go on. ksh93 and Bash are very powerful these days but the features are hardly used.
One difference with Perl is that users tend to make the effort to learn it (usually), but they don't bother learning their shell.