ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/common-sense/sense.pm
Revision: 1.3
Committed: Thu Jul 9 17:33:40 2009 UTC (14 years, 11 months ago) by root
Branch: MAIN
Changes since 1.2: +14 -20 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 =head1 NAME
2
3 common::sense - save a tree AND a kitten, use common::sense!
4
5 =head1 SYNOPSIS
6
7 use common::sense;
8
9 # roughly the same as, with much lower memory usage:
10 #
11 # use strict qw(vars subs);
12 # use feature qw(say state switch);
13 # no warnings;
14
15 =head1 DESCRIPTION
16
17 This module implements some sane defaults for Perl programs, as defined by
18 two typical (or not so typical - use your common sense) specimens of
19 Perl coders.
20
21 =over 4
22
23 =item use strict qw(subs vars)
24
25 Using C<use strict> is definitely common sense, but C<use strict
26 'refs'> definitely overshoots it's usefulness. After almost two
27 decades of Perl hacking, we decided that it does more harm than being
28 useful. Specifically, constructs like these:
29
30 @{ $var->[0] }
31
32 Must be written like this, when C<use strict 'refs'> is in scope, and
33 C<$var> can legally be C<undef>:
34
35 @{ $var->[0] || [] }
36
37 This is annoying, and doesn't shield against obvious mistakes such as
38 using C<"">, so one would even have to write:
39
40 @{ defined $var->[0] ? $var->[0] : [] }
41
42 ... which nobody with a bit of common sense would consider
43 writing. Curiously enough, sometimes, perl is not so strict, as this works
44 even with C<use strict> in scope:
45
46 for (@{ $var->[0] }) { ...
47
48 If that isnt hipocrasy! And all that from a mere program!
49
50 =item use feature qw(say state given)
51
52 We found it annoying that we always have to enable extra features. If
53 something breaks because it didn't anticipate future changes, so be
54 it. 5.10 broke almost all our XS modules and nobody cared either - and few
55 modules that are no longer maintained work with newer versions of Perl,
56 regardless of use feature.
57
58 If your code isn'talive, it's dead, jim.
59
60 =item no warnings
61
62 The dreaded warnings. Even worse, the horribly dreaded C<-w> switch. Even
63 though we don't care if other people use warnings (and certainly there are
64 useful ones), a lot of warnings simply go against the spirit of Perl, most
65 prominently, the warnings related to C<undef>. There is nothing wrong with
66 C<undef>: it has well-defined semantics, it is useful, and spitting out
67 warnings you never asked for is just evil.
68
69 So every module needs C<no warnings> to avoid somebody accidentally using
70 C<-w> and forcing his bad standards on our code. No will do.
71
72 (Also, why isn't this a C<use feature> switch? Adding warnings is
73 apparently considered O.K., even if it breaks your programs).
74
75 =item much less memory
76
77 Just using all those pragmas together waste <blink>I<< B<776> kilobytes
78
79 >></blink> of precious memory in my perl, for I<every single perl process
80
81 using our code>, which on our machines, is a lot. In comparison, this
82 module only uses I<< B<four> >> kilobytes (I even had to write it out so
83 it looks like more) of memory on the same platform.
84
85 The money/time/effort/electricity invested in these gigabytes (probably
86 petabytes globally!) of wasted memory could easily save 42 trees, and a
87 kitten!
88
89 =cut
90
91 package common::sense;
92
93 our $VERSION = '0.03';
94
95 sub import {
96 # no warnings
97 ${^WARNING_BITS} ^= ${^WARNING_BITS};
98
99 # use strict vars subs
100 $^H |= 0x00000600;
101
102 # use feature
103 $^H{feature_switch} =
104 $^H{feature_say} =
105 $^H{feature_state} = 1;
106 }
107
108 =cut
109
110 1;
111
112 =back
113
114 =head1 AUTHOR
115
116 Marc Lehmann <schmorp@schmorp.de>
117 http://home.schmorp.de/
118
119 =cut
120