Столкнулся с проблемой выбора простого класса для генерации accessors.
Нашел 3 модуля: accessors, Accessor::Fast, Object::Tiny
Все три схожи по функциональности.
Немножко погуглив (google.com & google.com/codesearch) выяснил, что
по сути наиболее часто используем оказался Accessor::Fast
остальные как-то странно мало кто использует
но посмотрев выяснил что плюсы есть как раз у них
accessors
+ удобно использовать с помощю прагмы
Object::Tiny
+ наиболее быстр
Вот и возник вопрос почему так популярен Accessor::Fast ? :)
Вот полные результаты benchmark'a
$ ./test_simple.pl
benchmark new() + get/set
use accessors;
timethis 100000: 2 wallclock secs ( 1.83 usr + 0.01 sys = 1.84 CPU) @ 54347.83/s (n=100000)
use Accessor;
timethis 100000: 3 wallclock secs ( 3.76 usr + 0.01 sys = 3.77 CPU) @ 26525.20/s (n=100000)
use Accessor::Fast;
timethis 100000: 3 wallclock secs ( 2.86 usr + 0.01 sys = 2.87 CPU) @ 34843.21/s (n=100000)
use Accessor::Faster;
timethis 100000: 4 wallclock secs ( 3.74 usr + 0.01 sys = 3.75 CPU) @ 26666.67/s (n=100000)
use Object::Tiny;
timethis 100000: 1 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 100000.00/s (n=100000)
test_simple.pl
#!/usr/bin/perl use Benchmark qw(:all); my $count = 100000; my $accessors = sub { require ClassTest::accessors; my $o = ClassTest::accessors->new(); $o->test('test'); $o->test(); }; my $Accessor = sub { require ClassTest::Accessor; my $o = ClassTest::Accessor->new(); $o->test('test'); $o->test(); }; my $AccessorFast = sub { require ClassTest::AccessorFast; my $o = ClassTest::AccessorFast->new(); $o->test('test'); $o->test(); }; my $AccessorFaster = sub { require ClassTest::AccessorFaster; my $o = ClassTest::AccessorFaster->new(); $o->test('test'); $o->test(); }; my $ObjectTiny = sub { require ClassTest::ObjectTiny; my $o = ClassTest::ObjectTiny->new(); $o->test('test'); $o->test(); }; clearallcache(); print "benchmark new() + get/set\n"; print "use accessors;\n"; timethis( $count, $accessors ); clearallcache(); print "use Accessor;\n"; timethis( $count, $Accessor ); clearallcache(); print "use Accessor::Fast;\n"; timethis( $count, $AccessorFast ); clearallcache(); print "use Accessor::Faster;\n"; timethis( $count, $AccessorFaster ); clearallcache(); print "use Object::Tiny;\n"; timethis( $count, $ObjectTiny ); clearallcache();
модули были вида
ClassTest::Accessor
package ClassTest::Accessor; use base qw( Class::Accessor ); use strict; use warnings; use Class::Accessor; __PACKAGE__->mk_accessors( qw( test ) ); our $VERSION = '0.01'; 1;

Все зависит от
Все зависит от того, что именно тебе надо получить. Если тебя интересует только стандартный наборе gettter/setter - Fast рулит.
А если нужно проводить валидацию входных параметров, задавать права доступа(которые он, кажется, просто не умееет), то я бы рекомендовал использовать Class::Accessor.
А вообще, впереди планеты всей прямая запись в кеш:)
Это как раз я
Это как раз я выбирал самый простой, чтобы только accessors и были
про выбор более сложного смотри на форуме http://kiev.pm.org/node/204
там я столкнулся c неоднозначной ситуацией
вот результаты
вот результаты отдельного тестирования вызова new() и get/set
./test_simple2.pl
benchmark new()
timethis 200000: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 198019.80/s (n=200000)
use Accessor;
timethis 200000: 1 wallclock secs ( 2.51 usr + 0.01 sys = 2.52 CPU) @ 79365.08/s (n=200000)
use Accessor::Fast;
timethis 200000: 3 wallclock secs ( 2.52 usr + 0.00 sys = 2.52 CPU) @ 79365.08/s (n=200000)
use Accessor::Faster;
timethis 200000: 5 wallclock secs ( 4.65 usr + 0.00 sys = 4.65 CPU) @ 43010.75/s (n=200000)
use Object::Tiny;
timethis 200000: 1 wallclock secs ( 0.76 usr + 0.00 sys = 0.76 CPU) @ 263157.89/s (n=200000)
benchmark get/set
use accessors;
timethis 200000: 1 wallclock secs ( 0.50 usr + 0.01 sys = 0.51 CPU) @ 392156.86/s (n=200000)
use Accessor;
timethis 200000: 2 wallclock secs ( 1.69 usr + 0.00 sys = 1.69 CPU) @ 118343.20/s (n=200000)
use Accessor::Fast;
timethis 200000: 1 wallclock secs ( 0.60 usr + 0.00 sys = 0.60 CPU) @ 333333.33/s (n=200000)
use Accessor::Faster;
timethis 200000: 1 wallclock secs ( 0.56 usr + 0.00 sys = 0.56 CPU) @ 357142.86/s (n=200000)
use Object::Tiny;
timethis 200000: 0 wallclock secs ( 0.33 usr + 0.00 sys = 0.33 CPU) @ 606060.61/s (n=200000)
(warning: too few iterations for a reliable count)
Есть еще
Есть еще Accessor::Faster, насколько я помню...