From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

Badger::Class::Vars - class module for defining package variables

SYNOPSIS

package My::Module;
# simple pre-declaration of variables
use Badger::Class::Vars '$FOO @BAR %BAZ';
# pre-declaration with values
'$FOO' => 10,
'@BAR' => [20, 30, 40],
'%BAZ' => { x => 100, y => 200 };
# via Badger::Class
vars => '$FOO @BAR %BAZ';
# via Badger::Class with values
vars => {
'$FOO' => 10,
'@BAR' => [20, 30, 40],
'%BAZ' => { x => 100, y => 200 },
};

DESCRIPTION

This module allows you to pre-declare and optionally, define values for package variables. It can be used directly, or via the vars export hook in Badger::Class.

# using the module directly
'$FOO @BAR %BAZ';
# using it via Badger::Class
vars => '$FOO @BAR %BAZ';

In the simple case, it works just like the vars.pm module in pre-declaring the variables named.

Unlike vars.pm, this method will only define scalar, list and hash package variables (e.g. $SOMETHING, @SOMETHING or %SOMETHING).

If you want to define subroutines/methods then you can use the Badger::Class::Methods module, or the methods import hook or methods() method in Badger::Class. If you want to define a glob reference then you're already operating in Wizard Mode and you don't need our help.

If you don't specify a leading sigil (i.e. $, @ or %) then it will default to $ and create a scalar variable.

vars => 'FOO BAR BAZ'; # declares $FOO, $BAR and $BAZ

You can also use a reference to a hash array to define values for variables.

vars => { # Equivalent code:
'$FOO' => 42, # our $FOO = 25
'@WIZ' => [100, 200, 300], # our @WIZ = (100, 200, 300)
'%WOZ' => {ping => 'pong'}, # our %QOZ = (ping => 'pong')
};

Scalar package variables can be assigned any scalar value or a reference to some other data type. Again, the leading $ is optional on the variable names. Note the difference in the equivalent code - this time we end up with scalar variables and references exclusively.

vars => { # Equivalent code:
FOO => 42, # our $FOO = 42
BAR => [100, 200, 300], # our $BAR = [100, 200, 300]
BAZ => {ping => 'pong'}, # our $BAZ = {ping => 'pong'}
HAI => sub { # our $HAI = sub { ... }
'Hello ' . (shift || 'World')
},
};

You can also assign any kind of data to a package list variable. If it's not already a list reference then the value will be treated as a single item list.

vars => { # Equivalent code:
'@FOO' => 42, # our @FOO = (42)
};

METHODS

vars($target,$vars)

This method defines variable in the $target package. It is usually called automatically when the module is loaded via use.

The $vars can be specified as a single text string of whitespace delimited symbols or by reference to a list of individual symbols. The variables will be declared but undefined.

# single string
Badger::Class::Vars->vars(
'My::Package',
'$FOO, @BAR, %BAZ'
);
# list reference
Badger::Class::Vars->vars(
'My::Package',
['$FOO', '@BAR', '%BAZ']
);

Use a reference to a hash array if you want to provide values for the variables.

# hash reference
Badger::Class::Vars->vars(
'My::Package',
{
'$FOO' => 10,
'@BAR' => [20, 30, 40],
'%BAZ' => { x => 100, y => 200 },
}
);

AUTHOR

Andy Wardley http://wardley.org/

COPYRIGHT

Copyright (C) 2008-2009 Andy Wardley. All Rights Reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.