DOKK / manpages / debian 10 / libaccessors-perl / accessors::ro.3pm.en
accessors::ro(3pm) User Contributed Perl Documentation accessors::ro(3pm)

accessors::ro - create 'classic' read-only accessor methods in caller's package.

  package Foo;
  use accessors::ro qw( foo bar baz );
  my $obj = bless { foo => 'read only? ' }, 'Foo';
  # values are read-only, so set is disabled:
  print "oh my!\n" if $obj->foo( "set?" ) eq 'read only? ';
  # if you really need to change the vars,
  # you must use direct-variable-access:
  $obj->{bar} = 'i need a drink ';
  $obj->{baz} = 'now';
  # always returns the current value:
  print $obj->foo, $obj->bar, $obj->baz, "!\n";

The accessors::ro pragma lets you create simple classic read-only accessors at compile-time.

The generated methods look like this:

  sub foo {
      my $self = shift;
      return $self->{foo};
  }

They always return the current value, just like accessors::ro.

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 0-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.

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

Steve Purkis <spurkis@cpan.org>

accessors, accessors::rw, accessors::classic, accessors::chained, base

2015-06-06 perl v5.20.2