accessors::ro - create 'classic' read-only accessor methods in caller's package.
Contents
Caveats
Classes using blessed scalarrefs, arrayrefs, etc. are not supported for sake of simplicity. Only
hashrefs are supported.
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.
Name
accessors::ro - create 'classic' read-only accessor methods in caller's package.
Performance
There is little-to-noperformacehit when using generated accessors; in fact there is usuallyaperformancegain.
• 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.
See Also
accessors, accessors::rw, accessors::classic, accessors::chained, base
perl v5.36.0 2022-10-13 accessors::ro(3pm)
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";
