home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl -w
-
- package Bench::Base;
-
- sub new {
- my($class) = shift;
- bless { test => 23 }, $class;
- }
-
- package Bench::Direct;
- use base qw(Bench::Base);
-
- package Bench::ByHand;
- use base qw(Bench::Base);
-
- sub test {
- my($self) = shift;
- if( @_ ) {
- $self->{test} = (@_ == 1 ? $_[0] : [@_]);
- }
- return $self->{test};
- }
-
- package Bench::Class::Accessor;
- use base qw(Class::Accessor);
- __PACKAGE__->mk_accessors(qw(test));
-
-
- package Bench::Class::Accessor::Fast;
- use base qw(Class::Accessor::Fast);
- __PACKAGE__->mk_accessors(qw(test));
-
- package Bench::Class::Accessor::Faster;
- use base qw(Class::Accessor::Faster);
- __PACKAGE__->mk_accessors(qw(test));
-
- my %init = ( test => 23 );
- my $ca = Bench::Class::Accessor->new(\%init);
- my $fast = Bench::Class::Accessor::Fast->new(\%init);
- my $faster = Bench::Class::Accessor::Faster->new(\%init);
- my $direct = Bench::Direct->new;
- my $byhand = Bench::ByHand->new;
-
- my $foo;
- my $control = 42;
-
-
- package main;
- use Benchmark 'cmpthese';
- use strict;
-
- print "accessors:\n";
- cmpthese( -1,
- {
- 'Basic' => sub { $foo = $ca->test; },
- 'Fast' => sub { $foo = $fast->test; },
- 'Faster' => sub { $foo = $faster->test; },
- 'Average' => sub { $foo = $byhand->test; },
- 'Direct' => sub { $foo = $direct->{test}; }
- }
- );
-
- print "mutators:\n";
- cmpthese( -1,
- {
- 'Acc' => sub { $ca->test(42); },
- 'Fast' => sub { $fast->test(42); },
- 'Faster' => sub { $faster->test(42); },
- 'By hand' => sub { $byhand->test(42); },
- 'Direct' => sub { $direct->{test} = 42; }
- }
- );
-
-