source: trunk/third/perl/lib/vars.pm @ 14545

Revision 14545, 2.5 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
1package vars;
2
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;
11use warnings::register();
12
13sub import {
14    my $callpack = caller;
15    my ($pack, @imports, $sym, $ch) = @_;
16    foreach $sym (@imports) {
17        ($ch, $sym) = unpack('a1a*', $sym);
18        if ($sym =~ tr/A-Za-z_0-9//c) {
19            # time for a more-detailed check-up
20            if ($sym =~ /::/) {
21                require Carp;
22                Carp::croak("Can't declare another package's variables");
23            } elsif ($sym =~ /^\w+[[{].*[]}]$/) {
24                require Carp;
25                Carp::croak("Can't declare individual elements of hash or array");
26            } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
27                warnings::warn("No need to declare built-in vars");
28            }
29        }
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;
38                Carp::croak("'$ch$sym' is not a valid variable name");
39             });
40    }
41};
42
431;
44__END__
45
46=head1 NAME
47
48vars - Perl pragma to predeclare global variable names (obsolete)
49
50=head1 SYNOPSIS
51
52    use vars qw($frob @mung %seen);
53
54=head1 DESCRIPTION
55
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
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
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
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.
76
77See L<perlmodlib/Pragmatic Modules>.
78
79=cut
Note: See TracBrowser for help on using the repository browser.