accessors::ro3pm
Create 'classic' read-only accessor methods in caller's package.
Usage
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";
Overview
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.
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 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.
Caveats
Classes using blessed scalarrefs, arrayrefs, etc. are not supported for sake of simplicity. Only hashrefs are supported.
Releases
7 releases since Debian 7 (Wheezy); the text changed 3 times.