This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Put back madvise lost because of a typo.
[perl5.git] / lib / vars.pm
CommitLineData
c07a80fd 1package vars;
2
fb73857a 3require 5.002;
4
5# The following require can't be removed during maintenance
6# releases, sadly, because of the risk of buggy code that does
7# require Carp; Carp::croak "..."; without brackets dying
8# if Carp hasn't been loaded in earlier compile time. :-(
9# We'll let those bugs get found on the development track.
10require Carp if $] < 5.00450;
11
12sub import {
13 my $callpack = caller;
14 my ($pack, @imports, $sym, $ch) = @_;
15 foreach $sym (@imports) {
fb73857a 16 ($ch, $sym) = unpack('a1a*', $sym);
014aafb8 17 if ($sym =~ tr/A-Za-z_0-9//c) {
15313f9c
TP
18 # time for a more-detailed check-up
19 if ($sym =~ /::/) {
20 require Carp;
21 Carp::croak("Can't declare another package's variables");
22 } elsif ($sym =~ /^\w+[[{].*[]}]$/) {
23 require Carp;
24 Carp::croak("Can't declare individual elements of hash or array");
25 } elsif ($^W and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
26 require Carp;
27 Carp::carp("No need to declare built-in vars");
28 }
29 }
fb73857a 30 *{"${callpack}::$sym"} =
31 ( $ch eq "\$" ? \$ {"${callpack}::$sym"}
32 : $ch eq "\@" ? \@ {"${callpack}::$sym"}
33 : $ch eq "\%" ? \% {"${callpack}::$sym"}
34 : $ch eq "\*" ? \* {"${callpack}::$sym"}
35 : $ch eq "\&" ? \& {"${callpack}::$sym"}
36 : do {
37 require Carp;
15313f9c 38 Carp::croak("'$ch$sym' is not a valid variable name");
fb73857a 39 });
40 }
41};
42
431;
44__END__
45
c07a80fd 46=head1 NAME
47
86a9aef2 48vars - Perl pragma to predeclare global variable names (obsolete)
c07a80fd 49
50=head1 SYNOPSIS
51
52 use vars qw($frob @mung %seen);
53
54=head1 DESCRIPTION
55
86a9aef2
GS
56NOTE: The functionality provided by this pragma has been superseded
57by C<our> declarations, available in Perl v5.6.0 or later. See
58L<perlfunc/our>.
59
c07a80fd 60This will predeclare all the variables whose names are
61in the list, allowing you to use them under "use strict", and
62disabling any typo warnings.
63
55497cff 64Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
65C<use subs> declarations are not BLOCK-scoped. They are thus effective
66for the entire file in which they appear. You may not rescind such
67declarations with C<no vars> or C<no subs>.
68
7a2e2cd6 69Packages such as the B<AutoLoader> and B<SelfLoader> that delay
70loading of subroutines within packages can create problems with
71package lexicals defined using C<my()>. While the B<vars> pragma
72cannot duplicate the effect of package lexicals (total transparency
73outside of the package), it can act as an acceptable substitute by
74pre-declaring global symbols, ensuring their availability to the
75later-loaded routines.
c6f23971 76
ee580363 77See L<perlmodlib/Pragmatic Modules>.
c07a80fd 78
79=cut