Matthew Simon Cavalletto

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 );