7 use warnings::register;
8 use strict qw(vars subs);
11 my $callpack = caller;
12 my (undef, @imports) = @_;
15 if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) {
17 # time for a more-detailed check-up
18 if ($sym =~ /^\w+[[{].*[]}]$/) {
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'))) {
25 Carp::croak("'$_' is not a valid variable name under strict vars");
28 $sym = "${callpack}::$sym" unless $sym =~ /::/;
30 ( $ch eq "\$" ? \$$sym
31 : $ch eq "\@" ? \@$sym
32 : $ch eq "\%" ? \%$sym
33 : $ch eq "\*" ? \*$sym
34 : $ch eq "\&" ? \&$sym
37 Carp::croak("'$_' is not a valid variable name");
41 Carp::croak("'$_' is not a valid variable name");
51 vars - Perl pragma to predeclare global variable names
55 use vars qw($frob @mung %seen);
59 NOTE: For use with variables in the current package for a single scope, the
60 functionality provided by this pragma has been superseded by C<our>
61 declarations, available in Perl v5.6.0 or later, and use of this pragma is
62 discouraged. See L<perlfunc/our>.
64 This pragma will predeclare all the variables whose names are
65 in the list, allowing you to use them under C<use strict>, and
66 disabling any typo warnings for them.
68 Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
69 C<use subs> declarations are not lexically scoped to the block they appear
71 the entire package in which they appear. It is not possible to rescind these
72 declarations with C<no vars> or C<no subs>.
74 Packages such as the B<AutoLoader> and B<SelfLoader> that delay
75 loading of subroutines within packages can create problems with
76 package lexicals defined using C<my()>. While the B<vars> pragma
77 cannot duplicate the effect of package lexicals (total transparency
78 outside of the package), it can act as an acceptable substitute by
79 pre-declaring global symbols, ensuring their availability to the
80 later-loaded routines.
82 See L<perlmodlib/Pragmatic Modules>.