---
name: "accessors::classic"
section: "3pm"
platform: "linux"
package: "libaccessors-perl"
version: "1.01-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/accessors::classic"
---

# accessors::classic(3pm)

create 'classic' read/write accessor methods in caller's package.

## NAME

accessors::classic - create 'classic' read/write accessor methods in caller's package.

## SYNOPSIS

```
  package Foo;
  use accessors::classic qw( foo bar baz );
  my $obj = bless {}, 'Foo';
  # always return the current value, even on set:
  $obj->foo( 'hello ' ) if $obj->bar( 'world' ) eq 'world';
  print $obj->foo, $obj->bar, $obj->baz( "!\n" );
```

## DESCRIPTION

The **accessors::classic** pragma lets you create simple *classic* Perl accessors at compile-time.

The generated methods look like this:

```
  sub foo {
      my $self = shift;
      $self->{foo} = shift if (@_);
      return $self->{foo};
  }
```

They *always* return the current value.

Note that there is *no* dash (`"-"`) prepended to the property name as there are in accessors.  This is for backwards compatibility.

## PERFORMANCE

There is **little-to-no performace hit** when using generated accessors; in fact there is **usually a performance gain**.

- •

  typically *5-15% faster* than hard-coded accessors (like the above example).

- •

  typically *1-15% slower* than *optimized* accessors (less readable).

- •

  typically a *small* performance hit at startup (accessors are created at compile-time).

- •

  uses the same anonymous sub to reduce memory consumption (sometimes by 80%).

See the benchmark tests included with this distribution for more details.

## CAVEATS

Classes using blessed scalarrefs, arrayrefs, etc. are not supported for sake of simplicity.  Only hashrefs are supported.

## AUTHOR

Steve Purkis \<spurkis@cpan.org\>

## SEE ALSO

accessors, accessors::rw, accessors::ro, accessors::chained, base
