This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make XSLoader's UPSTREAM as undef
[perl5.git] / dist / constant / lib / constant.pm
1 package constant;
2 use 5.005;
3 use strict;
4 use warnings::register;
5
6 use vars qw($VERSION %declared);
7 $VERSION = '1.23';
8
9 #=======================================================================
10
11 # Some names are evil choices.
12 my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD };
13 $keywords{UNITCHECK}++ if $] > 5.009;
14
15 my %forced_into_main = map +($_, 1),
16     qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG };
17
18 my %forbidden = (%keywords, %forced_into_main);
19
20 my $str_end = $] >= 5.006 ? "\\z" : "\\Z";
21 my $normal_constant_name = qr/^_?[^\W_0-9]\w*$str_end/;
22 my $tolerable = qr/^[A-Za-z_]\w*$str_end/;
23 my $boolean = qr/^[01]?$str_end/;
24
25 BEGIN {
26     # We'd like to do use constant _CAN_PCS => $] > 5.009002
27     # but that's a bit tricky before we load the constant module :-)
28     # By doing this, we save 1 run time check for *every* call to import.
29     no strict 'refs';
30     my $const = $] > 5.009002;
31     *_CAN_PCS = sub () {$const};
32
33     # Before this makes its way into a dev perl release, we have to do
34     # browser-sniffing, as it were....
35     return unless $const;
36     *{chr 256} = \3;
37     if (exists ${__PACKAGE__."::"}{"\xc4\x80"}) {
38         delete ${__PACKAGE__."::"}{"\xc4\x80"};
39         *_DOWNGRADE = sub () {1};
40     }
41     else {
42         delete ${__PACKAGE__."::"}{chr 256};
43         *_DOWNGRADE = sub () {0};
44     }
45 }
46
47 #=======================================================================
48 # import() - import symbols into user's namespace
49 #
50 # What we actually do is define a function in the caller's namespace
51 # which returns the value. The function we create will normally
52 # be inlined as a constant, thereby avoiding further sub calling 
53 # overhead.
54 #=======================================================================
55 sub import {
56     my $class = shift;
57     return unless @_;                   # Ignore 'use constant;'
58     my $constants;
59     my $multiple  = ref $_[0];
60     my $pkg = caller;
61     my $flush_mro;
62     my $symtab;
63
64     if (_CAN_PCS) {
65         no strict 'refs';
66         $symtab = \%{$pkg . '::'};
67     };
68
69     if ( $multiple ) {
70         if (ref $_[0] ne 'HASH') {
71             require Carp;
72             Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'");
73         }
74         $constants = shift;
75     } else {
76         unless (defined $_[0]) {
77             require Carp;
78             Carp::croak("Can't use undef as constant name");
79         }
80         $constants->{+shift} = undef;
81     }
82
83     foreach my $name ( keys %$constants ) {
84         # Normal constant name
85         if ($name =~ $normal_constant_name and !$forbidden{$name}) {
86             # Everything is okay
87
88         # Name forced into main, but we're not in main. Fatal.
89         } elsif ($forced_into_main{$name} and $pkg ne 'main') {
90             require Carp;
91             Carp::croak("Constant name '$name' is forced into main::");
92
93         # Starts with double underscore. Fatal.
94         } elsif ($name =~ /^__/) {
95             require Carp;
96             Carp::croak("Constant name '$name' begins with '__'");
97
98         # Maybe the name is tolerable
99         } elsif ($name =~ $tolerable) {
100             # Then we'll warn only if you've asked for warnings
101             if (warnings::enabled()) {
102                 if ($keywords{$name}) {
103                     warnings::warn("Constant name '$name' is a Perl keyword");
104                 } elsif ($forced_into_main{$name}) {
105                     warnings::warn("Constant name '$name' is " .
106                         "forced into package main::");
107                 }
108             }
109
110         # Looks like a boolean
111         # use constant FRED == fred;
112         } elsif ($name =~ $boolean) {
113             require Carp;
114             if (@_) {
115                 Carp::croak("Constant name '$name' is invalid");
116             } else {
117                 Carp::croak("Constant name looks like boolean value");
118             }
119
120         } else {
121            # Must have bad characters
122             require Carp;
123             Carp::croak("Constant name '$name' has invalid characters");
124         }
125
126         {
127             no strict 'refs';
128             my $full_name = "${pkg}::$name";
129             $declared{$full_name}++;
130             if ($multiple || @_ == 1) {
131                 my $scalar = $multiple ? $constants->{$name} : $_[0];
132
133                 if (_DOWNGRADE) { # for 5.10 to 5.14
134                     # Work around perl bug #31991: Sub names (actually glob
135                     # names in general) ignore the UTF8 flag. So we have to
136                     # turn it off to get the "right" symbol table entry.
137                     utf8::is_utf8 $name and utf8::encode $name;
138                 }
139
140                 # The constant serves to optimise this entire block out on
141                 # 5.8 and earlier.
142                 if (_CAN_PCS && $symtab && !exists $symtab->{$name}) {
143                     # No typeglob yet, so we can use a reference as space-
144                     # efficient proxy for a constant subroutine
145                     # The check in Perl_ck_rvconst knows that inlinable
146                     # constants from cv_const_sv are read only. So we have to:
147                     Internals::SvREADONLY($scalar, 1);
148                     $symtab->{$name} = \$scalar;
149                     ++$flush_mro;
150                 } else {
151                     *$full_name = sub () { $scalar };
152                 }
153             } elsif (@_) {
154                 my @list = @_;
155                 *$full_name = sub () { @list };
156             } else {
157                 *$full_name = sub () { };
158             }
159         }
160     }
161     # Flush the cache exactly once if we make any direct symbol table changes.
162     mro::method_changed_in($pkg) if _CAN_PCS && $flush_mro;
163 }
164
165 1;
166
167 __END__
168
169 =head1 NAME
170
171 constant - Perl pragma to declare constants
172
173 =head1 SYNOPSIS
174
175     use constant PI    => 4 * atan2(1, 1);
176     use constant DEBUG => 0;
177
178     print "Pi equals ", PI, "...\n" if DEBUG;
179
180     use constant {
181         SEC   => 0,
182         MIN   => 1,
183         HOUR  => 2,
184         MDAY  => 3,
185         MON   => 4,
186         YEAR  => 5,
187         WDAY  => 6,
188         YDAY  => 7,
189         ISDST => 8,
190     };
191
192     use constant WEEKDAYS => qw(
193         Sunday Monday Tuesday Wednesday Thursday Friday Saturday
194     );
195
196     print "Today is ", (WEEKDAYS)[ (localtime)[WDAY] ], ".\n";
197
198 =head1 DESCRIPTION
199
200 This pragma allows you to declare constants at compile-time.
201
202 When you declare a constant such as C<PI> using the method shown
203 above, each machine your script runs upon can have as many digits
204 of accuracy as it can use. Also, your program will be easier to
205 read, more likely to be maintained (and maintained correctly), and
206 far less likely to send a space probe to the wrong planet because
207 nobody noticed the one equation in which you wrote C<3.14195>.
208
209 When a constant is used in an expression, Perl replaces it with its
210 value at compile time, and may then optimize the expression further.
211 In particular, any code in an C<if (CONSTANT)> block will be optimized
212 away if the constant is false.
213
214 =head1 NOTES
215
216 As with all C<use> directives, defining a constant happens at
217 compile time. Thus, it's probably not correct to put a constant
218 declaration inside of a conditional statement (like C<if ($foo)
219 { use constant ... }>).
220
221 Constants defined using this module cannot be interpolated into
222 strings like variables.  However, concatenation works just fine:
223
224     print "Pi equals PI...\n";        # WRONG: does not expand "PI"
225     print "Pi equals ".PI."...\n";    # right
226
227 Even though a reference may be declared as a constant, the reference may
228 point to data which may be changed, as this code shows.
229
230     use constant ARRAY => [ 1,2,3,4 ];
231     print ARRAY->[1];
232     ARRAY->[1] = " be changed";
233     print ARRAY->[1];
234
235 Dereferencing constant references incorrectly (such as using an array
236 subscript on a constant hash reference, or vice versa) will be trapped at
237 compile time.
238
239 Constants belong to the package they are defined in.  To refer to a
240 constant defined in another package, specify the full package name, as
241 in C<Some::Package::CONSTANT>.  Constants may be exported by modules,
242 and may also be called as either class or instance methods, that is,
243 as C<< Some::Package->CONSTANT >> or as C<< $obj->CONSTANT >> where
244 C<$obj> is an instance of C<Some::Package>.  Subclasses may define
245 their own constants to override those in their base class.
246
247 The use of all caps for constant names is merely a convention,
248 although it is recommended in order to make constants stand out
249 and to help avoid collisions with other barewords, keywords, and
250 subroutine names. Constant names must begin with a letter or
251 underscore. Names beginning with a double underscore are reserved. Some
252 poor choices for names will generate warnings, if warnings are enabled at
253 compile time.
254
255 =head2 List constants
256
257 Constants may be lists of more (or less) than one value.  A constant
258 with no values evaluates to C<undef> in scalar context.  Note that
259 constants with more than one value do I<not> return their last value in
260 scalar context as one might expect.  They currently return the number
261 of values, but B<this may change in the future>.  Do not use constants
262 with multiple values in scalar context.
263
264 B<NOTE:> This implies that the expression defining the value of a
265 constant is evaluated in list context.  This may produce surprises:
266
267     use constant TIMESTAMP => localtime;                # WRONG!
268     use constant TIMESTAMP => scalar localtime;         # right
269
270 The first line above defines C<TIMESTAMP> as a 9-element list, as
271 returned by C<localtime()> in list context.  To set it to the string
272 returned by C<localtime()> in scalar context, an explicit C<scalar>
273 keyword is required.
274
275 List constants are lists, not arrays.  To index or slice them, they
276 must be placed in parentheses.
277
278     my @workdays = WEEKDAYS[1 .. 5];            # WRONG!
279     my @workdays = (WEEKDAYS)[1 .. 5];          # right
280
281 =head2 Defining multiple constants at once
282
283 Instead of writing multiple C<use constant> statements, you may define
284 multiple constants in a single statement by giving, instead of the
285 constant name, a reference to a hash where the keys are the names of
286 the constants to be defined.  Obviously, all constants defined using
287 this method must have a single value.
288
289     use constant {
290         FOO => "A single value",
291         BAR => "This", "won't", "work!",        # Error!
292     };
293
294 This is a fundamental limitation of the way hashes are constructed in
295 Perl.  The error messages produced when this happens will often be
296 quite cryptic -- in the worst case there may be none at all, and
297 you'll only later find that something is broken.
298
299 When defining multiple constants, you cannot use the values of other
300 constants defined in the same declaration.  This is because the
301 calling package doesn't know about any constant within that group
302 until I<after> the C<use> statement is finished.
303
304     use constant {
305         BITMASK => 0xAFBAEBA8,
306         NEGMASK => ~BITMASK,                    # Error!
307     };
308
309 =head2 Magic constants
310
311 Magical values and references can be made into constants at compile
312 time, allowing for way cool stuff like this.  (These error numbers
313 aren't totally portable, alas.)
314
315     use constant E2BIG => ($! = 7);
316     print   E2BIG, "\n";        # something like "Arg list too long"
317     print 0+E2BIG, "\n";        # "7"
318
319 You can't produce a tied constant by giving a tied scalar as the
320 value.  References to tied variables, however, can be used as
321 constants without any problems.
322
323 =head1 TECHNICAL NOTES
324
325 In the current implementation, scalar constants are actually
326 inlinable subroutines. As of version 5.004 of Perl, the appropriate
327 scalar constant is inserted directly in place of some subroutine
328 calls, thereby saving the overhead of a subroutine call. See
329 L<perlsub/"Constant Functions"> for details about how and when this
330 happens.
331
332 In the rare case in which you need to discover at run time whether a
333 particular constant has been declared via this module, you may use
334 this function to examine the hash C<%constant::declared>. If the given
335 constant name does not include a package name, the current package is
336 used.
337
338     sub declared ($) {
339         use constant 1.01;              # don't omit this!
340         my $name = shift;
341         $name =~ s/^::/main::/;
342         my $pkg = caller;
343         my $full_name = $name =~ /::/ ? $name : "${pkg}::$name";
344         $constant::declared{$full_name};
345     }
346
347 =head1 CAVEATS
348
349 In the current version of Perl, list constants are not inlined
350 and some symbols may be redefined without generating a warning.
351
352 It is not possible to have a subroutine or a keyword with the same
353 name as a constant in the same package. This is probably a Good Thing.
354
355 A constant with a name in the list C<STDIN STDOUT STDERR ARGV ARGVOUT
356 ENV INC SIG> is not allowed anywhere but in package C<main::>, for
357 technical reasons. 
358
359 Unlike constants in some languages, these cannot be overridden
360 on the command line or via environment variables.
361
362 You can get into trouble if you use constants in a context which
363 automatically quotes barewords (as is true for any subroutine call).
364 For example, you can't say C<$hash{CONSTANT}> because C<CONSTANT> will
365 be interpreted as a string.  Use C<$hash{CONSTANT()}> or
366 C<$hash{+CONSTANT}> to prevent the bareword quoting mechanism from
367 kicking in.  Similarly, since the C<< => >> operator quotes a bareword
368 immediately to its left, you have to say C<< CONSTANT() => 'value' >>
369 (or simply use a comma in place of the big arrow) instead of
370 C<< CONSTANT => 'value' >>.
371
372 =head1 SEE ALSO
373
374 L<Readonly> - Facility for creating read-only scalars, arrays, hashes.
375
376 L<Const> - Facility for creating read-only variables. Similar to C<Readonly>,
377 but uses C<SvREADONLY> instead of C<tie>.
378
379 L<Attribute::Constant> - Make read-only variables via attribute
380
381 L<Scalar::Readonly> - Perl extension to the C<SvREADONLY> scalar flag
382
383 L<Hash::Util> - A selection of general-utility hash subroutines (mostly
384 to lock/unlock keys and values)
385
386 =head1 BUGS
387
388 Please report any bugs or feature requests via the perlbug(1) utility.
389
390 =head1 AUTHORS
391
392 Tom Phoenix, E<lt>F<rootbeer@redcat.com>E<gt>, with help from
393 many other folks.
394
395 Multiple constant declarations at once added by Casey West,
396 E<lt>F<casey@geeknest.com>E<gt>.
397
398 Documentation mostly rewritten by Ilmari Karonen,
399 E<lt>F<perl@itz.pp.sci.fi>E<gt>.
400
401 This program is maintained by the Perl 5 Porters. 
402 The CPAN distribution is maintained by SE<eacute>bastien Aperghis-Tramoni
403 E<lt>F<sebastien@aperghis.net>E<gt>.
404
405 =head1 COPYRIGHT & LICENSE
406
407 Copyright (C) 1997, 1999 Tom Phoenix
408
409 This module is free software; you can redistribute it or modify it
410 under the same terms as Perl itself.
411
412 =cut