This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Refresh DB_File to 1.14
[perl5.git] / lib / vars.pm
CommitLineData
c07a80fd 1package vars;
2
3=head1 NAME
4
5vars - Perl pragma to predeclare global variable names
6
7=head1 SYNOPSIS
8
9 use vars qw($frob @mung %seen);
10
11=head1 DESCRIPTION
12
13This will predeclare all the variables whose names are
14in the list, allowing you to use them under "use strict", and
15disabling any typo warnings.
16
55497cff 17Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
18C<use subs> declarations are not BLOCK-scoped. They are thus effective
19for the entire file in which they appear. You may not rescind such
20declarations with C<no vars> or C<no subs>.
21
7a2e2cd6 22Packages such as the B<AutoLoader> and B<SelfLoader> that delay
23loading of subroutines within packages can create problems with
24package lexicals defined using C<my()>. While the B<vars> pragma
25cannot duplicate the effect of package lexicals (total transparency
26outside of the package), it can act as an acceptable substitute by
27pre-declaring global symbols, ensuring their availability to the
28later-loaded routines.
c6f23971 29
c07a80fd 30See L<perlmod/Pragmatic Modules>.
31
32=cut
3561ff89
CS
33
34require 5.002;
c07a80fd 35use Carp;
36
37sub import {
38 my $callpack = caller;
39 my ($pack, @imports, $sym, $ch) = @_;
40 foreach $sym (@imports) {
41 croak "Can't declare another package's variables" if $sym =~ /::/;
42 ($ch, $sym) = unpack('a1a*', $sym);
43 *{"${callpack}::$sym"} =
44 ( $ch eq "\$" ? \$ {"${callpack}::$sym"}
45 : $ch eq "\@" ? \@ {"${callpack}::$sym"}
46 : $ch eq "\%" ? \% {"${callpack}::$sym"}
47 : $ch eq "\*" ? \* {"${callpack}::$sym"}
48 : $ch eq "\&" ? \& {"${callpack}::$sym"}
49 : croak "'$ch$sym' is not a valid variable name\n");
50 }
51};
52
531;