NAME

Class::MakeMethods::Template::ClassVar - Static methods with subclass variation

SYNOPSIS

package MyObject;
use Class::MakeMethods::Template::ClassVar (
  scalar          => [ 'foo' ]
);

package main;

MyObject->foo('bar')
print MyObject->foo();

$MyObject::foo = 'bazillion';
print MyObject->foo();

DESCRIPTION

These meta-methods provide access to package (class global) variables, with the package determined at run-time.

This is basically the same as the PackageVar meta-methods, except that PackageVar methods find the named variable in the package that defines the method, while ClassVar methods use the package the object is blessed into. As a result, subclasses will each store a distinct value for a ClassVar method, but will share the same value for a PackageVar or Static method.

Common Parameters: The following parameters are defined for ClassVar meta-methods.

variable

The name of the variable to store the value in. Defaults to the same name as the method.

scalar

Creates methods to handle a scalar variable in the package of an instance.

See the documentation on Generic:scalar for interfaces and behaviors.

array

Creates methods to handle a array variable in the package of an instance.

See the documentation on Generic:array for interfaces and behaviors.

hash

Creates methods to handle a hash variable in the package of an instance.

See the documentation on Generic:hash for interfaces and behaviors.

vars

This rewrite rule converts package variable names into ClassVar methods of the equivalent data type.

Here's an example declaration:

package MyClass;

use Class::MakeMethods::Template::ClassVar (
  vars => '$VERSION @ISA'
);

MyClass now has methods that get and set the contents of its $MyClass::VERSION and @MyClass::ISA package variables:

MyClass->VERSION( 2.4 );
MyClass->push_ISA( 'Exporter' );

Subclasses can use these methods to adjust their own variables:

package MySubclass;
MySubclass->MyClass::push_ISA( 'MyClass' );
MySubclass->VERSION( 1.0 );