???????????????????????????? ??????????????/????????????????? ............/............... .........................../... ????????????????????????????? >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>> ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ???????????????????????????? ??????????????/????????????????? ............/............... .........................../... ????????????????????????????? >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>> ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Faster.pm000064400000005262152441636670006351 0ustar00package Class::Accessor::Faster; use base 'Class::Accessor'; use strict; use B 'perlstring'; $Class::Accessor::Faster::VERSION = '0.51'; my %slot; sub _slot { my($class, $field) = @_; my $n = $slot{$class}->{$field}; return $n if defined $n; $n = keys %{$slot{$class}}; $slot{$class}->{$field} = $n; return $n; } sub new { my($proto, $fields) = @_; my($class) = ref $proto || $proto; my $self = bless [], $class; $fields = {} unless defined $fields; for my $k (keys %$fields) { my $n = $class->_slot($k); $self->[$n] = $fields->{$k}; } return $self; } sub make_accessor { my($class, $field) = @_; my $n = $class->_slot($field); eval sprintf q{ sub { return $_[0][%d] if scalar(@_) == 1; return $_[0][%d] = scalar(@_) == 2 ? $_[1] : [@_[1..$#_]]; } }, $n, $n; } sub make_ro_accessor { my($class, $field) = @_; my $n = $class->_slot($field); eval sprintf q{ sub { return $_[0][%d] if @_ == 1; my $caller = caller; $_[0]->_croak(sprintf "'$caller' cannot alter the value of '%%s' on objects of class '%%s'", %s, %s); } }, $n, map(perlstring($_), $field, $class); } sub make_wo_accessor { my($class, $field) = @_; my $n = $class->_slot($field); eval sprintf q{ sub { if (@_ == 1) { my $caller = caller; $_[0]->_croak(sprintf "'$caller' cannot access the value of '%%s' on objects of class '%%s'", %s, %s); } else { return $_[0][%d] = $_[1] if @_ == 2; return (shift)->[%d] = \@_; } } }, map(perlstring($_), $field, $class), $n, $n; } 1; __END__ =head1 NAME Class::Accessor::Faster - Even faster, but less expandable, accessors =head1 SYNOPSIS package Foo; use base qw(Class::Accessor::Faster); =head1 DESCRIPTION This is a faster but less expandable version of Class::Accessor::Fast. Class::Accessor's generated accessors require two method calls to accomplish their task (one for the accessor, another for get() or set()). Class::Accessor::Fast eliminates calling set()/get() and does the access itself, resulting in a somewhat faster accessor. Class::Accessor::Faster uses an array reference underneath to be faster. Read the documentation for Class::Accessor for more info. =head1 AUTHORS Copyright 2017 Marty Pauley This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. That means either (a) the GNU General Public License or (b) the Artistic License. =head1 SEE ALSO L =cut Fast.pm000064400000004741152441636670006023 0ustar00package Class::Accessor::Fast; use base 'Class::Accessor'; use strict; use B 'perlstring'; $Class::Accessor::Fast::VERSION = '0.51'; sub make_accessor { my ($class, $field) = @_; eval sprintf q{ sub { return $_[0]{%s} if scalar(@_) == 1; return $_[0]{%s} = scalar(@_) == 2 ? $_[1] : [@_[1..$#_]]; } }, map { perlstring($_) } $field, $field; } sub make_ro_accessor { my($class, $field) = @_; eval sprintf q{ sub { return $_[0]{%s} if @_ == 1; my $caller = caller; $_[0]->_croak(sprintf "'$caller' cannot alter the value of '%%s' on objects of class '%%s'", %s, %s); } }, map { perlstring($_) } $field, $field, $class; } sub make_wo_accessor { my($class, $field) = @_; eval sprintf q{ sub { if (@_ == 1) { my $caller = caller; $_[0]->_croak(sprintf "'$caller' cannot access the value of '%%s' on objects of class '%%s'", %s, %s); } else { return $_[0]{%s} = $_[1] if @_ == 2; return (shift)->{%s} = \@_; } } }, map { perlstring($_) } $field, $class, $field, $field; } 1; __END__ =head1 NAME Class::Accessor::Fast - Faster, but less expandable, accessors =head1 SYNOPSIS package Foo; use base qw(Class::Accessor::Fast); # The rest is the same as Class::Accessor but without set() and get(). =head1 DESCRIPTION This is a faster but less expandable version of Class::Accessor. Class::Accessor's generated accessors require two method calls to accomplish their task (one for the accessor, another for get() or set()). Class::Accessor::Fast eliminates calling set()/get() and does the access itself, resulting in a somewhat faster accessor. The downside is that you can't easily alter the behavior of your accessors, nor can your subclasses. Of course, should you need this later, you can always swap out Class::Accessor::Fast for Class::Accessor. Read the documentation for Class::Accessor for more info. =head1 EFFICIENCY L for an efficiency comparison. =head1 AUTHORS Copyright 2017 Marty Pauley This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. That means either (a) the GNU General Public License or (b) the Artistic License. =head2 ORIGINAL AUTHOR Michael G Schwern =head1 SEE ALSO L =cut