logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

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

Author

       Steve Purkis <spurkis@cpan.org>

Caveats

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

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.

Name

       accessors::classic - create 'classic' read/write 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 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.

See Also

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

perl v5.36.0                                       2022-10-13                            accessors::classic(3pm)

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" );

See Also