This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Extraneous blank lines from Pod::Text
[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
c6f23971 22Packages such as the B<AutoLoader> and B<SelfLoader> that delay loading
23of subroutines within packages can create problems with package lexicals
24defined using C<my()>. While the B<vars> pragma cannot duplicate the
25effect of package lexicals (total transparency outside of the package),
26it can act as an acceptable substitute by pre-declaring global symbols,
27ensuring their availability to to the later-loaded routines.
28
c07a80fd 29See L<perlmod/Pragmatic Modules>.
30
31=cut
3561ff89
CS
32
33require 5.002;
c07a80fd 34use Carp;
35
36sub import {
37 my $callpack = caller;
38 my ($pack, @imports, $sym, $ch) = @_;
39 foreach $sym (@imports) {
40 croak "Can't declare another package's variables" if $sym =~ /::/;
41 ($ch, $sym) = unpack('a1a*', $sym);
42 *{"${callpack}::$sym"} =
43 ( $ch eq "\$" ? \$ {"${callpack}::$sym"}
44 : $ch eq "\@" ? \@ {"${callpack}::$sym"}
45 : $ch eq "\%" ? \% {"${callpack}::$sym"}
46 : $ch eq "\*" ? \* {"${callpack}::$sym"}
47 : $ch eq "\&" ? \& {"${callpack}::$sym"}
48 : croak "'$ch$sym' is not a valid variable name\n");
49 }
50};
51
521;