← Index
NYTProf Performance Profile   « block view • line view • sub view »
For 05.Domain_and_Item.t
  Run on Tue May 4 17:21:41 2010
Reported on Tue May 4 17:22:21 2010

File /usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP/Package.pm
Statements Executed 21188
Statement Execution Time 27.7ms
Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
22273214.3ms21.6msClass::MOP::Package::::get_package_symbolClass::MOP::Package::get_package_symbol
1276446.96ms6.98msClass::MOP::Package::::add_package_symbolClass::MOP::Package::add_package_symbol
2271324.31ms4.31msClass::MOP::Package::::namespaceClass::MOP::Package::namespace
355434182.15ms2.15msClass::MOP::Package::::nameClass::MOP::Package::name (xsub)
2722526µs2.18msClass::MOP::Package::::initializeClass::MOP::Package::initialize
1011105µs174µsClass::MOP::Package::::has_package_symbolClass::MOP::Package::has_package_symbol
21187µs2.62msClass::MOP::Package::::reinitializeClass::MOP::Package::reinitialize
51170µs70µsClass::MOP::Package::::_newClass::MOP::Package::_new
202168µs68µsClass::MOP::Package::::_deconstruct_variable_nameClass::MOP::Package::_deconstruct_variable_name
11114µs16µsClass::MOP::Package::::BEGIN@4Class::MOP::Package::BEGIN@4
1119µs22µsClass::MOP::Package::::BEGIN@100Class::MOP::Package::BEGIN@100
1119µs29µsClass::MOP::Package::::BEGIN@146Class::MOP::Package::BEGIN@146
1117µs91µsClass::MOP::Package::::BEGIN@14Class::MOP::Package::BEGIN@14
1117µs18µsClass::MOP::Package::::BEGIN@207Class::MOP::Package::BEGIN@207
1117µs31µsClass::MOP::Package::::BEGIN@8Class::MOP::Package::BEGIN@8
1117µs15µsClass::MOP::Package::::BEGIN@5Class::MOP::Package::BEGIN@5
1117µs17µsClass::MOP::Package::::BEGIN@152Class::MOP::Package::BEGIN@152
1117µs17µsClass::MOP::Package::::BEGIN@145Class::MOP::Package::BEGIN@145
1116µs41µsClass::MOP::Package::::BEGIN@7Class::MOP::Package::BEGIN@7
0000s0sClass::MOP::Package::::list_all_package_symbolsClass::MOP::Package::list_all_package_symbols
0000s0sClass::MOP::Package::::remove_package_globClass::MOP::Package::remove_package_glob
0000s0sClass::MOP::Package::::remove_package_symbolClass::MOP::Package::remove_package_symbol
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2package Class::MOP::Package;
3
4320µs219µs
# spent 16µs (14+3) within Class::MOP::Package::BEGIN@4 which was called # once (14µs+3µs) by base::import at line 4
use strict;
# spent 16µs making 1 call to Class::MOP::Package::BEGIN@4 # spent 3µs making 1 call to strict::import
5320µs224µs
# spent 15µs (7+9) within Class::MOP::Package::BEGIN@5 which was called # once (7µs+9µs) by base::import at line 5
use warnings;
# spent 15µs making 1 call to Class::MOP::Package::BEGIN@5 # spent 9µs making 1 call to warnings::import
6
7323µs275µs
# spent 41µs (6+34) within Class::MOP::Package::BEGIN@7 which was called # once (6µs+34µs) by base::import at line 7
use Scalar::Util 'blessed', 'reftype';
# spent 41µs making 1 call to Class::MOP::Package::BEGIN@7 # spent 34µs making 1 call to Exporter::import
8350µs255µs
# spent 31µs (7+24) within Class::MOP::Package::BEGIN@8 which was called # once (7µs+24µs) by base::import at line 8
use Carp 'confess';
# spent 31µs making 1 call to Class::MOP::Package::BEGIN@8 # spent 24µs making 1 call to Exporter::import
9
101700nsour $VERSION = '0.98';
11114µs$VERSION = eval $VERSION;
121300nsour $AUTHORITY = 'cpan:STEVAN';
13
143224µs291µs
# spent 91µs (7+84) within Class::MOP::Package::BEGIN@14 which was called # once (7µs+84µs) by base::import at line 14
use base 'Class::MOP::Object', 'Class::MOP::Mixin::HasMethods';
# spent 91µs making 1 call to Class::MOP::Package::BEGIN@14 # spent 84µs making 1 call to base::import, recursion: max depth 2, time 84µs
15
16# creation ...
17
18
# spent 2.18ms (526µs+1.66) within Class::MOP::Package::initialize which was called 27 times, avg 81µs/call: # 22 times (416µs+1.57ms) by Moose::Meta::Role::initialize at line 158 of Moose/Meta/Role.pm, avg 90µs/call # 5 times (109µs+87µs) by Moose::Exporter::build_import_methods at line 79 of Moose/Exporter.pm, avg 39µs/call
sub initialize {
19216426µs my ( $class, @args ) = @_;
20
21 unshift @args, "package" if @args % 2;
22
23 my %options = @args;
24 my $package_name = $options{package};
25
26
27 # we hand-construct the class
28 # until we can bootstrap it
29 if ( my $meta = Class::MOP::get_metaclass_by_name($package_name) ) {
# spent 29µs making 27 calls to Class::MOP::get_metaclass_by_name, avg 1µs/call
30 return $meta;
31 } else {
32 my $meta = ( ref $class || $class )->_new({
# spent 1.52ms making 22 calls to Moose::Meta::Role::_new, avg 69µs/call # spent 70µs making 5 calls to Class::MOP::Package::_new, avg 14µs/call
33 'package' => $package_name,
34 %options,
35 });
36 Class::MOP::store_metaclass_by_name($package_name, $meta);
# spent 41µs making 27 calls to Class::MOP::store_metaclass_by_name, avg 2µs/call
37
38 return $meta;
39 }
40}
41
42
# spent 2.62ms (87µs+2.54) within Class::MOP::Package::reinitialize which was called 2 times, avg 1.31ms/call: # 2 times (87µs+2.54ms) by Moose::Meta::Class::reinitialize at line 167 of Moose/Meta/Class.pm, avg 1.31ms/call
sub reinitialize {
431687µs my ( $class, @args ) = @_;
44
45 unshift @args, "package" if @args % 2;
46
47 my %options = @args;
48 my $package_name = delete $options{package};
49
50 (defined $package_name && $package_name
# spent 2µs making 2 calls to Scalar::Util::blessed, avg 1µs/call # spent 2µs making 1 call to UNIVERSAL::isa
51 && (!blessed $package_name || $package_name->isa('Class::MOP::Package')))
52 || confess "You must pass a package name or an existing Class::MOP::Package instance";
53
54 $package_name = $package_name->name
# spent 1µs making 2 calls to Scalar::Util::blessed, avg 500ns/call # spent 500ns making 1 call to Class::MOP::Package::name
55 if blessed $package_name;
56
57 Class::MOP::remove_metaclass_by_name($package_name);
# spent 6µs making 2 calls to Class::MOP::remove_metaclass_by_name, avg 3µs/call
58
59 $class->initialize($package_name, %options); # call with first arg form for compat
# spent 2.52ms making 2 calls to Moose::Meta::Class::initialize, avg 1.26ms/call
60}
61
62
# spent 70µs within Class::MOP::Package::_new which was called 5 times, avg 14µs/call: # 5 times (70µs+0s) by Class::MOP::Package::initialize at line 32, avg 14µs/call
sub _new {
632074µs my $class = shift;
64
65 return Class::MOP::Class->initialize($class)->new_object(@_)
66 if $class ne __PACKAGE__;
67
68 my $params = @_ == 1 ? $_[0] : {@_};
69
70 return bless {
71 package => $params->{package},
72
73 # NOTE:
74 # because of issues with the Perl API
75 # to the typeglob in some versions, we
76 # need to just always grab a new
77 # reference to the hash in the accessor.
78 # Ideally we could just store a ref and
79 # it would Just Work, but oh well :\
80
81 namespace => \undef,
82
83 } => $class;
84}
85
86# Attributes
87
88# NOTE:
89# all these attribute readers will be bootstrapped
90# away in the Class::MOP bootstrap section
91
92
# spent 4.31ms within Class::MOP::Package::namespace which was called 2271 times, avg 2µs/call: # 2227 times (4.20ms+0s) by Class::MOP::Package::get_package_symbol at line 194, avg 2µs/call # 34 times (92µs+0s) by Class::MOP::Mixin::HasMethods::get_method_list at line 151 of Class/MOP/Mixin/HasMethods.pm, avg 3µs/call # 10 times (20µs+0s) by Class::MOP::Package::has_package_symbol at line 166, avg 2µs/call
sub namespace {
93 # NOTE:
94 # because of issues with the Perl API
95 # to the typeglob in some versions, we
96 # need to just always grab a new
97 # reference to the hash here. Ideally
98 # we could just store a ref and it would
99 # Just Work, but oh well :\
1003146µs236µs
# spent 22µs (9+14) within Class::MOP::Package::BEGIN@100 which was called # once (9µs+14µs) by base::import at line 100
no strict 'refs';
# spent 22µs making 1 call to Class::MOP::Package::BEGIN@100 # spent 14µs making 1 call to strict::unimport
10122716.61ms \%{$_[0]->{'package'} . '::'}
102}
103
104# utility methods
105
106{
10723µs my %SIGIL_MAP = (
108 '$' => 'SCALAR',
109 '@' => 'ARRAY',
110 '%' => 'HASH',
111 '&' => 'CODE',
112 );
113
114
# spent 68µs within Class::MOP::Package::_deconstruct_variable_name which was called 20 times, avg 3µs/call: # 10 times (46µs+0s) by Class::MOP::Package::has_package_symbol at line 163, avg 5µs/call # 10 times (22µs+0s) by Class::MOP::Package::add_package_symbol at line 140, avg 2µs/call
sub _deconstruct_variable_name {
11512082µs my ($self, $variable) = @_;
116
117 (defined $variable)
118 || confess "You must pass a variable name";
119
120 my $sigil = substr($variable, 0, 1, '');
121
122 (defined $sigil)
123 || confess "The variable name must include a sigil";
124
125 (exists $SIGIL_MAP{$sigil})
126 || confess "I do not recognize that sigil '$sigil'";
127
128 return ($variable, $sigil, $SIGIL_MAP{$sigil});
129 }
130}
131
132# Class attributes
133
134# ... these functions have to touch the symbol table itself,.. yuk
135
136
# spent 6.98ms (6.96+22µs) within Class::MOP::Package::add_package_symbol which was called 1276 times, avg 5µs/call: # 727 times (4.08ms+0s) by Class::MOP::Mixin::HasMethods::add_method at line 70 of Class/MOP/Mixin/HasMethods.pm, avg 6µs/call # 514 times (2.69ms+0s) by Class::MOP::Package::get_package_symbol at line 197, avg 5µs/call # 25 times (122µs+0s) by Class::MOP::Class:::around at line 89 of Class/MOP/Class/Immutable/Trait.pm, avg 5µs/call # 10 times (72µs+22µs) by Moose::Exporter::build_import_methods at line 85 of Moose/Exporter.pm, avg 9µs/call
sub add_package_symbol {
13751047.61ms my ($self, $variable, $initial_value) = @_;
138
139 my ($name, $sigil, $type) = ref $variable eq 'HASH'
140 ? @{$variable}{qw[name sigil type]}
# spent 22µs making 10 calls to Class::MOP::Package::_deconstruct_variable_name, avg 2µs/call
141 : $self->_deconstruct_variable_name($variable);
142
143 my $pkg = $self->{'package'};
144
145329µs227µs
# spent 17µs (7+10) within Class::MOP::Package::BEGIN@145 which was called # once (7µs+10µs) by base::import at line 145
no strict 'refs';
# spent 17µs making 1 call to Class::MOP::Package::BEGIN@145 # spent 10µs making 1 call to strict::unimport
146359µs249µs
# spent 29µs (9+20) within Class::MOP::Package::BEGIN@146 which was called # once (9µs+20µs) by base::import at line 146
no warnings 'redefine', 'misc', 'prototype';
# spent 29µs making 1 call to Class::MOP::Package::BEGIN@146 # spent 20µs making 1 call to warnings::unimport
147 *{$pkg . '::' . $name} = ref $initial_value ? $initial_value : \$initial_value;
148}
149
150sub remove_package_glob {
151 my ($self, $name) = @_;
1523194µs227µs
# spent 17µs (7+10) within Class::MOP::Package::BEGIN@152 which was called # once (7µs+10µs) by base::import at line 152
no strict 'refs';
# spent 17µs making 1 call to Class::MOP::Package::BEGIN@152 # spent 10µs making 1 call to strict::unimport
153 delete ${$self->name . '::'}{$name};
154}
155
156# ... these functions deal with stuff on the namespace level
157
158
# spent 174µs (105+68) within Class::MOP::Package::has_package_symbol which was called 10 times, avg 17µs/call: # 10 times (105µs+68µs) by Moose::Exporter::build_import_methods at line 83 of Moose/Exporter.pm, avg 17µs/call
sub has_package_symbol {
1594380µs my ( $self, $variable ) = @_;
160
161 my ( $name, $sigil, $type )
162 = ref $variable eq 'HASH'
163 ? @{$variable}{qw[name sigil type]}
# spent 46µs making 10 calls to Class::MOP::Package::_deconstruct_variable_name, avg 5µs/call
164 : $self->_deconstruct_variable_name($variable);
165
166 my $namespace = $self->namespace;
# spent 20µs making 10 calls to Class::MOP::Package::namespace, avg 2µs/call
167
168 return 0 unless exists $namespace->{$name};
169
170 my $entry_ref = \$namespace->{$name};
171 if ( reftype($entry_ref) eq 'GLOB' ) {
# spent 2µs making 1 call to Scalar::Util::reftype
172 if ( $type eq 'SCALAR' ) {
173 return defined( ${ *{$entry_ref}{SCALAR} } );
174 }
175 else {
176 return defined( *{$entry_ref}{$type} );
177 }
178 }
179 else {
180
181 # a symbol table entry can be -1 (stub), string (stub with prototype),
182 # or reference (constant)
183 return $type eq 'CODE';
184 }
185}
186
187
# spent 21.6ms (14.3+7.38) within Class::MOP::Package::get_package_symbol which was called 2227 times, avg 10µs/call: # 1999 times (12.7ms+6.62ms) by Class::MOP::Mixin::HasMethods::get_method at line 101 of Class/MOP/Mixin/HasMethods.pm, avg 10µs/call # 180 times (1.22ms+628µs) by Class::MOP::Class::superclasses at line 582 of Class/MOP/Class.pm, avg 10µs/call # 48 times (324µs+126µs) by Class::MOP::Class::superclasses at line 563 of Class/MOP/Class.pm, avg 9µs/call
sub get_package_symbol {
1881336211.6ms my ($self, $variable) = @_;
189
190 my ($name, $sigil, $type) = ref $variable eq 'HASH'
191 ? @{$variable}{qw[name sigil type]}
192 : $self->_deconstruct_variable_name($variable);
193
194 my $namespace = $self->namespace;
# spent 4.20ms making 2227 calls to Class::MOP::Package::namespace, avg 2µs/call
195
196 # FIXME
197 $self->add_package_symbol($variable)
# spent 2.69ms making 514 calls to Class::MOP::Package::add_package_symbol, avg 5µs/call # spent 491µs making 25 calls to Class::MOP::Class::Immutable::Class::MOP::Class::add_package_symbol, avg 20µs/call
198 unless exists $namespace->{$name};
199
200 my $entry_ref = \$namespace->{$name};
201
202 if ( ref($entry_ref) eq 'GLOB' ) {
203 return *{$entry_ref}{$type};
204 }
205 else {
206 if ( $type eq 'CODE' ) {
2073364µs229µs
# spent 18µs (7+11) within Class::MOP::Package::BEGIN@207 which was called # once (7µs+11µs) by base::import at line 207
no strict 'refs';
# spent 18µs making 1 call to Class::MOP::Package::BEGIN@207 # spent 11µs making 1 call to strict::unimport
208 return \&{ $self->name . '::' . $name };
209 }
210 else {
211 return undef;
212 }
213 }
214}
215
216sub remove_package_symbol {
217 my ($self, $variable) = @_;
218
219 my ($name, $sigil, $type) = ref $variable eq 'HASH'
220 ? @{$variable}{qw[name sigil type]}
221 : $self->_deconstruct_variable_name($variable);
222
223 # FIXME:
224 # no doubt this is grossly inefficient and
225 # could be done much easier and faster in XS
226
227 my ($scalar_desc, $array_desc, $hash_desc, $code_desc) = (
228 { sigil => '$', type => 'SCALAR', name => $name },
229 { sigil => '@', type => 'ARRAY', name => $name },
230 { sigil => '%', type => 'HASH', name => $name },
231 { sigil => '&', type => 'CODE', name => $name },
232 );
233
234 my ($scalar, $array, $hash, $code);
235 if ($type eq 'SCALAR') {
236 $array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
237 $hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
238 $code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
239 }
240 elsif ($type eq 'ARRAY') {
241 $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
242 $hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
243 $code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
244 }
245 elsif ($type eq 'HASH') {
246 $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
247 $array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
248 $code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
249 }
250 elsif ($type eq 'CODE') {
251 $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
252 $array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
253 $hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
254 }
255 else {
256 confess "This should never ever ever happen";
257 }
258
259 $self->remove_package_glob($name);
260
261 $self->add_package_symbol($scalar_desc => $scalar) if defined $scalar;
262 $self->add_package_symbol($array_desc => $array) if defined $array;
263 $self->add_package_symbol($hash_desc => $hash) if defined $hash;
264 $self->add_package_symbol($code_desc => $code) if defined $code;
265}
266
267sub list_all_package_symbols {
268 my ($self, $type_filter) = @_;
269
270 my $namespace = $self->namespace;
271 return keys %{$namespace} unless defined $type_filter;
272
273 # NOTE:
274 # or we can filter based on
275 # type (SCALAR|ARRAY|HASH|CODE)
276 if ( $type_filter eq 'CODE' ) {
277 return grep {
278 (ref($namespace->{$_})
279 ? (ref($namespace->{$_}) eq 'SCALAR')
280 : (ref(\$namespace->{$_}) eq 'GLOB'
281 && defined(*{$namespace->{$_}}{CODE})));
282 } keys %{$namespace};
283 } else {
284 return grep { *{$namespace->{$_}}{$type_filter} } keys %{$namespace};
285 }
286}
287
288114µs1;
289
290__END__
291
292=pod
293
294=head1 NAME
295
296Class::MOP::Package - Package Meta Object
297
298=head1 DESCRIPTION
299
300The Package Protocol provides an abstraction of a Perl 5 package. A
301package is basically namespace, and this module provides methods for
302looking at and changing that namespace's symbol table.
303
304=head1 METHODS
305
306=over 4
307
308=item B<< Class::MOP::Package->initialize($package_name) >>
309
310This method creates a new C<Class::MOP::Package> instance which
311represents specified package. If an existing metaclass object exists
312for the package, that will be returned instead.
313
314=item B<< Class::MOP::Package->reinitialize($package) >>
315
316This method forcibly removes any existing metaclass for the package
317before calling C<initialize>. In contrast to C<initialize>, you may
318also pass an existing C<Class::MOP::Package> instance instead of just
319a package name as C<$package>.
320
321Do not call this unless you know what you are doing.
322
323=item B<< $metapackage->name >>
324
325This is returns the package's name, as passed to the constructor.
326
327=item B<< $metapackage->namespace >>
328
329This returns a hash reference to the package's symbol table. The keys
330are symbol names and the values are typeglob references.
331
332=item B<< $metapackage->add_package_symbol($variable_name, $initial_value) >>
333
334This method accepts a variable name and an optional initial value. The
335C<$variable_name> must contain a leading sigil.
336
337This method creates the variable in the package's symbol table, and
338sets it to the initial value if one was provided.
339
340=item B<< $metapackage->get_package_symbol($variable_name) >>
341
342Given a variable name, this method returns the variable as a reference
343or undef if it does not exist. The C<$variable_name> must contain a
344leading sigil.
345
346=item B<< $metapackage->has_package_symbol($variable_name) >>
347
348Returns true if there is a package variable defined for
349C<$variable_name>. The C<$variable_name> must contain a leading sigil.
350
351=item B<< $metapackage->remove_package_symbol($variable_name) >>
352
353This will remove the package variable specified C<$variable_name>. The
354C<$variable_name> must contain a leading sigil.
355
356=item B<< $metapackage->remove_package_glob($glob_name) >>
357
358Given the name of a glob, this will remove that glob from the
359package's symbol table. Glob names do not include a sigil. Removing
360the glob removes all variables and subroutines with the specified
361name.
362
363=item B<< $metapackage->list_all_package_symbols($type_filter) >>
364
365This will list all the glob names associated with the current
366package. These names do not have leading sigils.
367
368You can provide an optional type filter, which should be one of
369'SCALAR', 'ARRAY', 'HASH', or 'CODE'.
370
371=item B<< $metapackage->get_all_package_symbols($type_filter) >>
372
373This works much like C<list_all_package_symbols>, but it returns a
374hash reference. The keys are glob names and the values are references
375to the value for that name.
376
377=back
378
379=head2 Method introspection and creation
380
381These methods allow you to introspect a class's methods, as well as
382add, remove, or change methods.
383
384Determining what is truly a method in a Perl 5 class requires some
385heuristics (aka guessing).
386
387Methods defined outside the package with a fully qualified name (C<sub
388Package::name { ... }>) will be included. Similarly, methods named
389with a fully qualified name using L<Sub::Name> are also included.
390
391However, we attempt to ignore imported functions.
392
393Ultimately, we are using heuristics to determine what truly is a
394method in a class, and these heuristics may get the wrong answer in
395some edge cases. However, for most "normal" cases the heuristics work
396correctly.
397
398=over 4
399
400=item B<< $metapackage->get_method($method_name) >>
401
402This will return a L<Class::MOP::Method> for the specified
403C<$method_name>. If the class does not have the specified method, it
404returns C<undef>
405
406=item B<< $metapackage->has_method($method_name) >>
407
408Returns a boolean indicating whether or not the class defines the
409named method. It does not include methods inherited from parent
410classes.
411
412=item B<< $metapackage->get_method_list >>
413
414This will return a list of method I<names> for all methods defined in
415this class.
416
417=item B<< $metapackage->add_method($method_name, $method) >>
418
419This method takes a method name and a subroutine reference, and adds
420the method to the class.
421
422The subroutine reference can be a L<Class::MOP::Method>, and you are
423strongly encouraged to pass a meta method object instead of a code
424reference. If you do so, that object gets stored as part of the
425class's method map directly. If not, the meta information will have to
426be recreated later, and may be incorrect.
427
428If you provide a method object, this method will clone that object if
429the object's package name does not match the class name. This lets us
430track the original source of any methods added from other classes
431(notably Moose roles).
432
433=item B<< $metapackage->remove_method($method_name) >>
434
435Remove the named method from the class. This method returns the
436L<Class::MOP::Method> object for the method.
437
438=item B<< $metapackage->method_metaclass >>
439
440Returns the class name of the method metaclass, see
441L<Class::MOP::Method> for more information on the method metaclass.
442
443=item B<< $metapackage->wrapped_method_metaclass >>
444
445Returns the class name of the wrapped method metaclass, see
446L<Class::MOP::Method::Wrapped> for more information on the wrapped
447method metaclass.
448
449=item B<< Class::MOP::Package->meta >>
450
451This will return a L<Class::MOP::Class> instance for this class.
452
453=back
454
455=head1 AUTHORS
456
457Stevan Little E<lt>stevan@iinteractive.comE<gt>
458
459=head1 COPYRIGHT AND LICENSE
460
461Copyright 2006-2010 by Infinity Interactive, Inc.
462
463L<http://www.iinteractive.com>
464
465This library is free software; you can redistribute it and/or modify
466it under the same terms as Perl itself.
467
468=cut
# spent 2.15ms within Class::MOP::Package::name which was called 3554 times, avg 604ns/call: # 775 times (365µs+0s) by Class::MOP::Mixin::HasMethods::add_method at line 45 of Class/MOP/Mixin/HasMethods.pm, avg 470ns/call # 705 times (413µs+0s) by Class::MOP::Class::linearized_isa at line 609 of Class/MOP/Class.pm, avg 586ns/call # 525 times (346µs+0s) by Class::MOP::Mixin::HasMethods::add_method at line 65 of Class/MOP/Mixin/HasMethods.pm, avg 658ns/call # 301 times (157µs+0s) by Class::MOP::Mixin::HasMethods::_code_is_mine at line 80 of Class/MOP/Mixin/HasMethods.pm, avg 521ns/call # 276 times (185µs+0s) by Class::MOP::Attribute::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP/Attribute.pm:340] at line 332 of Class/MOP/Attribute.pm, avg 670ns/call # 191 times (123µs+0s) by Class::MOP::Class::is_anon_class at line 224 of Class/MOP/Class.pm, avg 646ns/call # 154 times (75µs+0s) by Class::MOP::Class::clone_object at line 404 of Class/MOP/Class.pm, avg 488ns/call # 141 times (76µs+0s) by Class::MOP::Mixin::HasMethods::wrap_method_body at line 31 of Class/MOP/Mixin/HasMethods.pm, avg 540ns/call # 92 times (60µs+0s) by Class::MOP::Class::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP/Class.pm:678] at line 664 of Class/MOP/Class.pm, avg 648ns/call # 65 times (111µs+0s) by Class::MOP::Class::new_object at line 349 of Class/MOP/Class.pm, avg 2µs/call # 57 times (41µs+0s) by Class::MOP::Attribute::_process_accessors at line 310 of Class/MOP/Attribute.pm, avg 714ns/call # 48 times (41µs+0s) by Class::MOP::Class::superclasses at line 569 of Class/MOP/Class.pm, avg 846ns/call # 43 times (37µs+0s) by Class::MOP::Method::Inlined::can_be_inlined at line 35 of Class/MOP/Method/Inlined.pm, avg 867ns/call # 37 times (25µs+0s) by Class::MOP::Class::_inline_constructor at line 1055 of Class/MOP/Class.pm, avg 670ns/call # 31 times (17µs+0s) by Class::MOP::Method::Constructor::_generate_constructor_method_inline at line 109 of Class/MOP/Method/Constructor.pm, avg 561ns/call # 27 times (15µs+0s) by Class::MOP::Class::class_precedence_list at line 614 of Class/MOP/Class.pm, avg 563ns/call # 18 times (12µs+0s) by Class::MOP::Instance::_class_name at line 71 of Class/MOP/Instance.pm, avg 650ns/call # 13 times (13µs+0s) by Moose::Meta::Role::Application::ToClass::check_role_exclusions at line 39 of Moose/Meta/Role/Application/ToClass.pm, avg 1µs/call # 13 times (10µs+0s) by Moose::Meta::Role::Application::ToRole::check_role_exclusions at line 23 of Moose/Meta/Role/Application/ToRole.pm, avg 738ns/call # 8 times (4µs+0s) by Class::MOP::Class::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP/Class.pm:678] at line 671 of Class/MOP/Class.pm, avg 512ns/call # 6 times (4µs+0s) by Class::MOP::Class::_inline_destructor at line 1089 of Class/MOP/Class.pm, avg 633ns/call # 6 times (4µs+0s) by Moose::Meta::Method::Constructor::_initialize_body at line 63 of Moose/Meta/Method/Constructor.pm, avg 600ns/call # 5 times (2µs+0s) by Class::MOP::Module::_instantiate_module at line 59 of Class/MOP/Module.pm, avg 480ns/call # 3 times (3µs+0s) by MooseX::ClassAttribute::Role::Meta::Class::_class_attribute_var_name at line 194 of MooseX/ClassAttribute/Role/Meta/Class.pm, avg 1µs/call # 2 times (2µs+0s) by Class::MOP::Class::DESTROY at line 245 of Class/MOP/Class.pm, avg 900ns/call # 2 times (2µs+0s) by Class::MOP::Class:::after at line 136 of MooseX/AttributeHelpers/Trait/Base.pm, avg 750ns/call # 2 times (1µs+0s) by Class::MOP::Attribute::get_write_method_ref at line 209 of Class/MOP/Attribute.pm, avg 600ns/call # 2 times (900ns+0s) by Moose::Meta::Role::Application::ToRole::apply_methods at line 77 of Moose/Meta/Role/Application/ToRole.pm, avg 450ns/call # once (2µs+0s) by Moose::Meta::Class::_reinitialize_with at line 435 of Moose/Meta/Class.pm # once (1µs+0s) by Moose::Util::MetaRole::_make_new_class at line 150 of Moose/Util/MetaRole.pm # once (900ns+0s) by Moose::Meta::Attribute::interpolate_class at line 125 of Moose/Meta/Attribute.pm # once (600ns+0s) by MooseX::ClassAttribute::Meta::Method::Accessor::_inline_check_lazy at line 99 of MooseX/ClassAttribute/Meta/Method/Accessor.pm # once (600ns+0s) by Moose::Meta::Class::_reinitialize_with at line 418 of Moose/Meta/Class.pm # once (500ns+0s) by Class::MOP::Package::reinitialize at line 54 of Class/MOP/Package.pm
sub Class::MOP::Package::name; # xsub