I object to those "always" you are using in your list. You wouldn't be
able to create useful modules like Exporter and Memoize, if you always
had to use strict. Same with warnings. Perl generates warnings if it
things the programmer makes an error. But sometimes, Perl is wrong.
The right thing to do is turn warnings off, instead of having to go
through hoops to satisfy Perl.
As for point 3, I couldn't agree less. CGI.pm is a monster,
doing far more than just CGI (come on, producing HTML shouldn't be a
part of a module calling itself CGI). In the rare cases I do any CGI
programming, I tend to avoid it like the plague.
As for you tab issue, it's a good example why tabs should be avoided.
Your example indicates a tabwidth of 4. Any idea how that's going to
look like on a terminal with a default tabstop of 8? Sure, the left
indents will all be lined up, but can you garantee none of the lines
will exceed 80 characters? Any idea what's going to happen if one
of the tabs is replaced by 4 spaces, and someone using tabstops of 8
is going to view it? It won't align correctly anymore.
Tabs are evil. The savings in disk space and I/O might have been
significant 30 years ago, but they aren't nowadays. With spaces,
the indentation will always look the way the author intended it
to be (given fixed width fonts). With tabs, it will only look right
if all authors and viewers used the same tabstops.