# man > Class::XSAccessor(3pm)

---
type: CommandReference
command: Class::XSAccessor
mode: perldoc
section: 3pm
source: perldoc
---

## Quick Reference

- `use Class::XSAccessor getters => { get_foo => 'foo' }` — generate fast XS getter for hash key `foo`
- `use Class::XSAccessor setters => { set_foo => 'foo' }` — generate fast XS setter for hash key `foo`
- `use Class::XSAccessor accessors => { foo => 'foo' }` — generate read/write accessor (mutator) for `foo`
- `use Class::XSAccessor defined_predicates => { has_foo => 'foo' }` — generate predicate checking `defined` on attribute
- `use Class::XSAccessor exists_predicates => { has_foo => 'foo' }` — generate predicate checking `exists` on attribute
- `use Class::XSAccessor constructor => 'new'` — generate simple XS constructor (blessing hash)
- `use Class::XSAccessor lvalue_accessors => { zip => 'zip' }` — generate lvalue accessor (experimental)
- `use Class::XSAccessor true => ['is_token'], false => ['significant']` — generate methods that always return true/false

## Name

Class::XSAccessor — Generate fast XS accessors without runtime compilation

## Synopsis

perl
package MyClass;
use Class::XSAccessor
  replace     => 1,   # Replace existing methods (if any)
  constructor => 'new',
  getters     => {
    get_foo => 'foo', # 'foo' is the hash key to access
    get_bar => 'bar',
  },
  setters => {
    set_foo => 'foo',
    set_bar => 'bar',
  },
  accessors => {
    foo => 'foo',
    bar => 'bar',
  },
  defined_predicates => {
    defined_foo => 'foo',
    defined_bar => 'bar',
  },
  exists_predicates => {
    has_foo => 'foo',
    has_bar => 'bar',
  },
  lvalue_accessors => { baz => 'baz' },
  true  => [ 'is_token', 'is_whitespace' ],
  false => [ 'significant' ];
Alternative syntax using hash reference and shorthand for identical key/value:

perl
use Class::XSAccessor {
   accessors => [ 'foo', 'bar' ],
};
## Options

### General

- `replace` — Set to true to prevent complaints about replacing existing subroutines.
- `chained` — Set to true so setters and mutators (with argument) return the object instead of the new value.
- `class` — Specify target class (default: calling class); methods can be installed in other classes.

### Getter, Setter, Accessor Types

- `getters => { method_name => 'hash_key' }` — Generate read-only accessor.
- `setters => { method_name => 'hash_key' }` — Generate write-only accessor (returns new value unless `chained`).
- `accessors => { method_name => 'hash_key' }` — Generate read/write mutator (with argument sets, returns value; without argument reads).
- `lvalue_accessors => { method_name => 'hash_key' }` — Generate lvalue accessor (experimental; allows assignment to method call).

### Predicate Types

- `defined_predicates` (alias `predicates`) => `{ method_name => 'hash_key' }` — Check if attribute is `defined`.
- `exists_predicates => { method_name => 'hash_key' }` — Check if attribute `exists` in the object hash.

### Constant Methods

- `true => [ 'method_name', ... ]` — Generate methods that always return true.
- `false => [ 'method_name', ... ]` — Generate methods that always return false.

### Constructor

- `constructor => 'name'` or `constructors => [ 'name1', 'name2' ]` — Generate simple XS constructor: `bless { @_ }, $class`.

## Examples

### Basic usage

perl
package MyClass;
use Class::XSAccessor
  constructor => 'new',
  getters => { get_foo => 'foo' },
  setters => { set_foo => 'foo' };

my $obj = MyClass->new(foo => 42);
print $obj->get_foo;          # 42
$obj->set_foo(99);
print $obj->get_foo;          # 99
### Using chained setters

perl
use Class::XSAccessor
  chained => 1,
  accessors => { foo => 'foo' };

my $obj = Class->new;
$obj->foo(1)->foo(2);   # chained calls
### Lvalue accessor (experimental)

perl
package Address;
use Class::XSAccessor
  constructor => 'new',
  lvalue_accessors => { zip_code => 'zip' };

my $addr = Address->new(zip => 2);
$addr->zip_code = 76135;   # lvalue assignment
print $addr->zip_code;     # 76135
## See Also

- [Class::XSAccessor::Array](https://metacpan.org/pod/Class::XSAccessor::Array)
- [AutoXS](https://metacpan.org/pod/AutoXS)