NAME¶
accessors::ro - create 'classic' read-only accessor methods in caller's package.
SYNOPSIS¶
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";
DESCRIPTION¶
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.
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::classic, accessors::chained, base