LOGONLY mark 1408fb as NODOC since it appears to be a useful but minor warning cleanup
[p5sagit/p5-mst-13.2.git] / lib / vars.pm
CommitLineData
c07a80fd 1package vars;
2
3b825e41 3use 5.006;
fb73857a 4
e6d61def 5our $VERSION = '1.01';
3d842d7f 6
7use warnings::register;
e6d61def 8use strict qw(vars subs);
fb73857a 9
10sub import {
11 my $callpack = caller;
386f5e9f 12 my ($pack, @imports) = @_;
13 my ($sym, $ch);
7eb43e02 14 foreach (@imports) {
08cd7fd6 15 if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) {
af42750f 16 if ($sym =~ /\W/) {
08cd7fd6 17 # time for a more-detailed check-up
18 if ($sym =~ /^\w+[[{].*[]}]$/) {
19 require Carp;
20 Carp::croak("Can't declare individual elements of hash or array");
21 } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
22 warnings::warn("No need to declare built-in vars");
23 } elsif (($^H &= strict::bits('vars'))) {
24 require Carp;
25 Carp::croak("'$_' is not a valid variable name under strict vars");
26 }
15313f9c 27 }
08cd7fd6 28 $sym = "${callpack}::$sym" unless $sym =~ /::/;
29 *$sym =
30 ( $ch eq "\$" ? \$$sym
31 : $ch eq "\@" ? \@$sym
32 : $ch eq "\%" ? \%$sym
33 : $ch eq "\*" ? \*$sym
34 : $ch eq "\&" ? \&$sym
35 : do {
36 require Carp;
37 Carp::croak("'$_' is not a valid variable name");
38 });
39 } else {
40 require Carp;
41 Carp::croak("'$_' is not a valid variable name");
15313f9c 42 }
fb73857a 43 }
44};
45
461;
47__END__
48
c07a80fd 49=head1 NAME
50
86a9aef2 51vars - Perl pragma to predeclare global variable names (obsolete)
c07a80fd 52
53=head1 SYNOPSIS
54
55 use vars qw($frob @mung %seen);
56
57=head1 DESCRIPTION
58
7eb43e02 59NOTE: For variables in the current package, the functionality provided
60by this pragma has been superseded by C<our> declarations, available
61in Perl v5.6.0 or later. See L<perlfunc/our>.
86a9aef2 62
c07a80fd 63This will predeclare all the variables whose names are
64in the list, allowing you to use them under "use strict", and
65disabling any typo warnings.
66
55497cff 67Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
68C<use subs> declarations are not BLOCK-scoped. They are thus effective
69for the entire file in which they appear. You may not rescind such
70declarations with C<no vars> or C<no subs>.
71
7a2e2cd6 72Packages such as the B<AutoLoader> and B<SelfLoader> that delay
73loading of subroutines within packages can create problems with
74package lexicals defined using C<my()>. While the B<vars> pragma
75cannot duplicate the effect of package lexicals (total transparency
76outside of the package), it can act as an acceptable substitute by
77pre-declaring global symbols, ensuring their availability to the
78later-loaded routines.
c6f23971 79
ee580363 80See L<perlmodlib/Pragmatic Modules>.
c07a80fd 81
82=cut