vars::i - Perl pragma to declare and simultaneously initialize global variables.
use Data::Dumper; $Data::Dumper::Deparse = 1; use vars::i '$VERSION' => 3.44; use vars::i '@BORG' => 6 .. 6; use vars::i '%BORD' => 1 .. 10; use vars::i '&VERSION' => sub(){rand 20}; use vars::i '*SOUTH' => *STDOUT; BEGIN { print SOUTH Dumper [ $VERSION, \@BORG, \%BORD, \&VERSION ]; } use vars::i [ # has the same effect as the 5 use statements above '$VERSION' => 3.66, '@BORG' => [6 .. 6], '%BORD' => {1 .. 10}, '&VERSION' => sub(){rand 20}, '*SOUTH' => *STDOUT, ]; print SOUTH Dumper [ $VERSION, \@BORG, \%BORD, \&VERSION ];
For whatever reason, I once had to write something like
BEGIN { use vars '$VERSION'; $VERSION = 3; }
or
our $VERSION; BEGIN { $VERSION = 3; }
and I really didn't like typing that much. With this package, I can say:
use vars::i '$VERSION' => 3;
and get the same effect.
Also, I like being able to say
use vars::i '$VERSION' => sprintf("%d.%02d", q$Revision: 1.3 $ =~ /: (\d+)\.(\d+)/); use vars::i [ '$VERSION' => sprintf("%d.%02d", q$Revision: 1.3 $ =~ /: (\d+)\.(\d+)/), '$REVISION'=> '$Id: GENERIC.pm,v 1.3 2002/06/02 11:12:38 _ Exp $', ];
Like with use vars;, there is no need to fully qualify the variable name. However, you may if you wish.
use vars;
Specifying a variable but not a value will succeed silently, and will not create the variable. E.g., use vars::i '$foo'; is a no-op.
use vars::i '$foo';
Now, you might expect that use vars::i '$foo'; would behave the same way as use vars '$foo';. That would not be an unreasonable expectation. However, use vars::i qw($foo $bar); has a very different effect than does use vars qw($foo $bar);! In order to avoid subtle errors in the two-parameter case, vars::i also rejects the one-parameter case.
use vars '$foo';
use vars::i qw($foo $bar);
use vars qw($foo $bar);
vars::i
Trying to create a special variable is fatal. E.g., use vars::i '$@', 1; will die at compile time.
use vars::i '$@', 1;
See vars, "our" in perldoc, "Pragmatic Modules" in perlmodlib.
This version supports Perl 5.6+. If you are running an earlier Perl, use version 1.01 of this module (PODMASTER/vars-i-1.01).
This module uses Minilla for release management. When developing, you can use normal prove -l for testing based on the files in lib/. Before submitting a pull request, please:
prove -l
lib/
make sure all tests pass under minil test
minil test
add brief descriptions to the Changes file, under the {{$NEXT}} line.
Changes
{{$NEXT}}
update the .mailmap file to list your PAUSE user ID if you have one, and if your git commits are not under your @cpan.org email. That way you will be properly listed as a contributor in MetaCPAN.
.mailmap
@cpan.org
D.H. <podmaster@cpan.org>
Christopher White <cxw@cpan.org>
Thanks to everyone who has worked on vars, which served as the basis for this module.
Please report any bugs at https://github.com/cxw42/Perl-vars-i/issues.
You can also see the old bugtracker at http://rt.cpan.org/NoAuth/Bugs.html?Dist=vars-i for older bugs.
Copyright (c) 2003--2019 by D.H. aka PodMaster, and contributors. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install vars::i, copy and paste the appropriate command in to your terminal.
cpanm
cpanm vars::i
CPAN shell
perl -MCPAN -e shell install vars::i
For more information on module installation, please visit the detailed CPAN module installation guide.