← Index
NYTProf Performance Profile   « block view • line view • sub view »
For /usr/share/koha/opac/cgi-bin/opac/opac-search.pl
  Run on Tue Oct 15 17:10:45 2013
Reported on Tue Oct 15 17:11:25 2013

Filename/usr/share/perl5/MARC/Field.pm
StatementsExecuted 129389 statements in 263ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
14978457.8ms61.5msMARC::Field::::subfieldMARC::Field::subfield
16507553.8ms78.6msMARC::Field::::newMARC::Field::new
109456432.5ms32.5msMARC::Field::::tagMARC::Field::tag
12834424.7ms28.1msMARC::Field::::subfieldsMARC::Field::subfields
21826417.1ms22.6msMARC::Field::::indicatorMARC::Field::indicator
75854116.1ms16.8msMARC::Field::::CORE:matchMARC::Field::CORE:match (opcode)
21942215.3ms20.4msMARC::Field::::is_controlfield_tagMARC::Field::is_controlfield_tag
57406315.0ms15.0msMARC::Field::::is_control_fieldMARC::Field::is_control_field
569229.19ms10.7msMARC::Field::::replace_withMARC::Field::replace_with
512111.45ms1.45msMARC::Field::::warningsMARC::Field::warnings
3211300µs380µsMARC::Field::::dataMARC::Field::data
11117µs21µsMARC::Field::::BEGIN@3MARC::Field::BEGIN@3
11111µs69µsMARC::Field::::BEGIN@7MARC::Field::BEGIN@7
11110µs42µsMARC::Field::::BEGIN@10MARC::Field::BEGIN@10
1119µs11µsMARC::Field::::BEGIN@4MARC::Field::BEGIN@4
1119µs41µsMARC::Field::::BEGIN@8MARC::Field::BEGIN@8
1119µs50µsMARC::Field::::BEGIN@5MARC::Field::BEGIN@5
0000s0sMARC::Field::::_gripeMARC::Field::_gripe
0000s0sMARC::Field::::_normalize_arrayrefMARC::Field::_normalize_arrayref
0000s0sMARC::Field::::_warnMARC::Field::_warn
0000s0sMARC::Field::::add_subfieldsMARC::Field::add_subfields
0000s0sMARC::Field::::allow_controlfield_tagsMARC::Field::allow_controlfield_tags
0000s0sMARC::Field::::as_formattedMARC::Field::as_formatted
0000s0sMARC::Field::::as_stringMARC::Field::as_string
0000s0sMARC::Field::::as_usmarcMARC::Field::as_usmarc
0000s0sMARC::Field::::cloneMARC::Field::clone
0000s0sMARC::Field::::delete_subfieldMARC::Field::delete_subfield
0000s0sMARC::Field::::delete_subfieldsMARC::Field::delete_subfields
0000s0sMARC::Field::::disallow_controlfield_tagsMARC::Field::disallow_controlfield_tags
0000s0sMARC::Field::::updateMARC::Field::update
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package MARC::Field;
2
3327µs224µs
# spent 21µs (17+4) within MARC::Field::BEGIN@3 which was called: # once (17µs+4µs) by MARC::Record::BEGIN@14 at line 3
use strict;
# spent 21µs making 1 call to MARC::Field::BEGIN@3 # spent 4µs making 1 call to strict::import
4323µs213µs
# spent 11µs (9+2) within MARC::Field::BEGIN@4 which was called: # once (9µs+2µs) by MARC::Record::BEGIN@14 at line 4
use integer;
# spent 11µs making 1 call to MARC::Field::BEGIN@4 # spent 2µs making 1 call to integer::import
5336µs292µs
# spent 50µs (9+42) within MARC::Field::BEGIN@5 which was called: # once (9µs+42µs) by MARC::Record::BEGIN@14 at line 5
use Carp;
# spent 50µs making 1 call to MARC::Field::BEGIN@5 # spent 42µs making 1 call to Exporter::import
6
7338µs2127µs
# spent 69µs (11+58) within MARC::Field::BEGIN@7 which was called: # once (11µs+58µs) by MARC::Record::BEGIN@14 at line 7
use constant SUBFIELD_INDICATOR => "\x1F";
# spent 69µs making 1 call to MARC::Field::BEGIN@7 # spent 58µs making 1 call to constant::import
8330µs272µs
# spent 41µs (9+32) within MARC::Field::BEGIN@8 which was called: # once (9µs+32µs) by MARC::Record::BEGIN@14 at line 8
use constant END_OF_FIELD => "\x1E";
# spent 41µs making 1 call to MARC::Field::BEGIN@8 # spent 32µs making 1 call to constant::import
9
1031.85ms274µs
# spent 42µs (10+32) within MARC::Field::BEGIN@10 which was called: # once (10µs+32µs) by MARC::Record::BEGIN@14 at line 10
use vars qw( $ERROR );
# spent 42µs making 1 call to MARC::Field::BEGIN@10 # spent 32µs making 1 call to vars::import
11
12=head1 NAME
13
- -
4811µsmy %extra_controlfield_tags = ();
49
50
51=head1 METHODS
52
- -
71
# spent 78.6ms (53.8+24.8) within MARC::Field::new which was called 1650 times, avg 48µs/call: # 512 times (17.9ms+8.53ms) by C4::Charset::SetUTF8Flag at line 142 of /usr/share/koha/lib/C4/Charset.pm, avg 52µs/call # 512 times (16.0ms+5.92ms) by MARC::File::USMARC::decode at line 222 of MARC/File/USMARC.pm, avg 43µs/call # 480 times (14.1ms+7.02ms) by MARC::File::SAX::end_element at line 92 of MARC/File/SAX.pm, avg 44µs/call # 57 times (3.60ms+1.65ms) by C4::XSLT::transformMARCXML4XSLT at line 96 of /usr/share/koha/lib/C4/XSLT.pm, avg 92µs/call # 32 times (730µs+1.17ms) by MARC::File::SAX::end_element at line 83 of MARC/File/SAX.pm, avg 60µs/call # 32 times (710µs+241µs) by MARC::File::USMARC::decode at line 192 of MARC/File/USMARC.pm, avg 30µs/call # 25 times (751µs+282µs) by C4::Biblio::_koha_marc_update_bib_ids at line 2854 of /usr/share/koha/lib/C4/Biblio.pm, avg 41µs/call
sub new {
723087464.5ms my $class = shift;
73 $class = $class;
74
75 ## MARC spec indicates that tags can have alphabetical
76 ## characters in them! If they do appear we assume that
77 ## they have indicators like tags > 010 unless they've
78 ## been previously defined as control tags using
79 ## add_controlfield
80
81 my $tagno = shift;
8216505.79ms ($tagno =~ /^[0-9A-Za-z]{3}$/)
# spent 5.79ms making 1650 calls to MARC::Field::CORE:match, avg 4µs/call
83 or croak( "Tag \"$tagno\" is not a valid tag." );
84165014.7ms my $is_control = $class->is_controlfield_tag($tagno);
# spent 14.7ms making 1650 calls to MARC::Field::is_controlfield_tag, avg 9µs/call
85
86 my $self = bless {
87 _tag => $tagno,
88 _warnings => [],
89 _is_control_field => $is_control,
90 }, $class;
91
92 if ( $is_control ) {
93 $self->{_data} = shift;
94 $self->_warn("Too much data for control field '$tagno'") if (@_);
95 } else {
96 for my $indcode ( qw( _ind1 _ind2 ) ) {
97 my $indicator = shift;
98 scalar(@_) or croak("Field $tagno must have indicators (use ' ' for empty indicators)");
9931724.34ms if ($indicator !~ /^[0-9A-Za-z ]$/ ) {
# spent 4.34ms making 3172 calls to MARC::Field::CORE:match, avg 1µs/call
100 $self->_warn( "Invalid indicator \"$indicator\" forced to blank" ) unless ($indicator eq "");
101 $indicator = " ";
102 }
103 $self->{$indcode} = $indicator;
104 } # for
105
106 (@_ >= 2)
107 or croak( "Field $tagno must have at least one subfield" );
108
109 # Normally, we go thru add_subfields(), but internally we can cheat
110 $self->{_subfields} = [@_];
111 }
112
113 return $self;
114} # new()
115
116
117=head2 tag()
118
- -
123
# spent 32.5ms within MARC::Field::tag which was called 10945 times, avg 3µs/call: # 7827 times (22.0ms+0s) by MARC::Record::field at line 210 of MARC/Record.pm, avg 3µs/call # 974 times (1.75ms+0s) by MARC::Record::insert_fields_ordered at line 366 of MARC/Record.pm, avg 2µs/call # 544 times (2.54ms+0s) by C4::Charset::SetUTF8Flag at line 137 of /usr/share/koha/lib/C4/Charset.pm, avg 5µs/call # 544 times (2.29ms+0s) by MARC::File::XML::record at line 345 of MARC/File/XML.pm, avg 4µs/call # 544 times (1.67ms+0s) by C4::Biblio::TransformMarcToKoha at line 2511 of /usr/share/koha/lib/C4/Biblio.pm, avg 3µs/call # 512 times (2.24ms+0s) by C4::Charset::SetUTF8Flag at line 142 of /usr/share/koha/lib/C4/Charset.pm, avg 4µs/call
sub tag {
1242189041.1ms my $self = shift;
125 return $self->{_tag};
126}
127
128=head2 indicator(indno)
129
- -
136
# spent 22.6ms (17.1+5.51) within MARC::Field::indicator which was called 2182 times, avg 10µs/call: # 1024 times (7.46ms+2.57ms) by C4::Charset::SetUTF8Flag at line 142 of /usr/share/koha/lib/C4/Charset.pm, avg 10µs/call # 512 times (4.02ms+1.25ms) by MARC::File::XML::record at line 352 of MARC/File/XML.pm, avg 10µs/call # 512 times (3.97ms+1.18ms) by MARC::File::XML::record at line 351 of MARC/File/XML.pm, avg 10µs/call # 114 times (1.47ms+462µs) by C4::XSLT::transformMARCXML4XSLT at line 96 of /usr/share/koha/lib/C4/XSLT.pm, avg 17µs/call # 10 times (122µs+35µs) by C4::Koha::GetNormalizedUPC at line 1311 of /usr/share/koha/lib/C4/Koha.pm, avg 16µs/call # 10 times (63µs+22µs) by C4::Koha::GetNormalizedEAN at line 1373 of /usr/share/koha/lib/C4/Koha.pm, avg 9µs/call
sub indicator($) {
137872816.0ms my $self = shift;
138 my $indno = shift;
139
14021825.51ms $self->_warn( "Control fields (generally, those with tags below 010) do not have indicators" )
# spent 5.51ms making 2182 calls to MARC::Field::is_control_field, avg 3µs/call
141 if $self->is_control_field;
142
143 if ( $indno == 1 ) {
144 return $self->{_ind1};
145 } elsif ( $indno == 2 ) {
146 return $self->{_ind2};
147 } else {
148 croak( "Indicator number must be 1 or 2" );
149 }
150}
151
152=head2 allow_controlfield_tags($tag, $tag2, ...)
153
- -
159sub allow_controlfield_tags {
160 my $self = shift;
161 foreach my $tag (@_) {
162 $extra_controlfield_tags{$tag} = 1;
163 }
164}
165
166=head2 disallow_controlfield_tags($tag, $tag2, ...)
167
- -
176sub disallow_controlfield_tags {
177 my $self = shift;
178 if ($_[0] eq '*') {
179 %extra_controlfield_tags = ();
180 return;
181 }
182 foreach my $tag (@_) {
183 delete $extra_controlfield_tags{$tag};
184 }
185}
186
187=head2 is_controlfield_tag($tag) -- does the given tag denote a control field?
188
- -
193sub is_controlfield_tag
194
# spent 20.4ms (15.3+5.07) within MARC::Field::is_controlfield_tag which was called 2194 times, avg 9µs/call: # 1650 times (11.3ms+3.38ms) by MARC::Field::new at line 84, avg 9µs/call # 544 times (3.98ms+1.70ms) by MARC::File::USMARC::decode at line 192 of MARC/File/USMARC.pm, avg 10µs/call
{
1951087420.9ms my $self = shift;
196 my $tag = shift;
197 return 1 if ($extra_controlfield_tags{$tag});
198114µs21955.68ms return 1 if (($tag =~ /^\d+$/) && ($tag < 10));
# spent 5.07ms making 2194 calls to MARC::Field::CORE:match, avg 2µs/call # spent 613µs making 1 call to utf8::SWASHNEW
199 return 0; # otherwise, it's not a control field
200}
201
202
203=head2 is_control_field()
204
- -
209
# spent 15.0ms within MARC::Field::is_control_field which was called 5740 times, avg 3µs/call: # 2182 times (5.51ms+0s) by MARC::Field::indicator at line 140, avg 3µs/call # 1497 times (3.63ms+0s) by MARC::Field::subfield at line 238, avg 2µs/call # 1283 times (3.37ms+0s) by MARC::Field::subfields at line 271, avg 3µs/call # 544 times (1.84ms+0s) by MARC::File::XML::record at line 346 of MARC/File/XML.pm, avg 3µs/call # 202 times (582µs+0s) by C4::Biblio::TransformMarcToKoha at line 2513 of /usr/share/koha/lib/C4/Biblio.pm, avg 3µs/call # 32 times (80µs+0s) by MARC::Field::data at line 291, avg 3µs/call
sub is_control_field {
2101148023.1ms my $self = shift;
211 return $self->{_is_control_field};
212}
213
214=head2 subfield(code)
215
- -
234
# spent 61.5ms (57.8+3.63) within MARC::Field::subfield which was called 1497 times, avg 41µs/call: # 1280 times (54.7ms+3.09ms) by C4::Search::searchResults at line 1839 of /usr/share/koha/lib/C4/Search.pm, avg 45µs/call # 145 times (2.07ms+328µs) by MARC::Record::subfield at line 239 of MARC/Record.pm, avg 17µs/call # 25 times (400µs+108µs) by C4::Koha::GetNormalizedOCLCNumber at line 1391 of /usr/share/koha/lib/C4/Koha.pm, avg 20µs/call # 10 times (150µs+20µs) by C4::Koha::GetNormalizedUPC at line 1312 of /usr/share/koha/lib/C4/Koha.pm, avg 17µs/call # 10 times (106µs+20µs) by C4::Koha::GetNormalizedEAN at line 1374 of /usr/share/koha/lib/C4/Koha.pm, avg 13µs/call # 9 times (173µs+26µs) by C4::Search::searchResults at line 1787 of /usr/share/koha/lib/C4/Search.pm, avg 22µs/call # 9 times (127µs+25µs) by C4::Biblio::GetCOinSBiblio at line 1402 of /usr/share/koha/lib/C4/Biblio.pm, avg 17µs/call # 9 times (90µs+17µs) by C4::Search::searchResults at line 1788 of /usr/share/koha/lib/C4/Search.pm, avg 12µs/call
sub subfield {
2353496657.9ms my $self = shift;
236 my $code_wanted = shift;
237
23814973.63ms croak( "Control fields (generally, just tags below 010) do not have subfields, use data()" )
# spent 3.63ms making 1497 calls to MARC::Field::is_control_field, avg 2µs/call
239 if $self->is_control_field;
240
241 my @data = @{$self->{_subfields}};
242 my @found;
243 while ( defined( my $code = shift @data ) ) {
244 if ( $code eq $code_wanted ) {
245 push( @found, shift @data );
246 } else {
247 shift @data;
248 }
249 }
250 if ( wantarray() ) { return @found; }
251 return( $found[0] );
252}
253
254=head2 subfields()
255
- -
268
# spent 28.1ms (24.7+3.37) within MARC::Field::subfields which was called 1283 times, avg 22µs/call: # 512 times (9.60ms+1.47ms) by C4::Charset::SetUTF8Flag at line 139 of /usr/share/koha/lib/C4/Charset.pm, avg 22µs/call # 512 times (9.00ms+1.34ms) by MARC::File::XML::record at line 354 of MARC/File/XML.pm, avg 20µs/call # 202 times (3.79ms+376µs) by C4::Biblio::TransformMarcToKoha at line 2530 of /usr/share/koha/lib/C4/Biblio.pm, avg 21µs/call # 57 times (2.29ms+187µs) by C4::XSLT::transformMARCXML4XSLT at line 90 of /usr/share/koha/lib/C4/XSLT.pm, avg 44µs/call
sub subfields {
269769824.5ms my $self = shift;
270
27112833.37ms $self->_warn( "Control fields (generally, just tags below 010) do not have subfields" )
# spent 3.37ms making 1283 calls to MARC::Field::is_control_field, avg 3µs/call
272 if $self->is_control_field;
273
274 my @list;
275 my @data = @{$self->{_subfields}};
276 while ( defined( my $code = shift @data ) ) {
277 push( @list, [$code, shift @data] );
278 }
279 return @list;
280}
281
282=head2 data()
283
- -
288
# spent 380µs (300+80) within MARC::Field::data which was called 32 times, avg 12µs/call: # 32 times (300µs+80µs) by MARC::File::XML::record at line 347 of MARC/File/XML.pm, avg 12µs/call
sub data {
289128296µs my $self = shift;
290
2913280µs croak( "data() is only for control fields (generally, just tags below 010) , use subfield()" )
# spent 80µs making 32 calls to MARC::Field::is_control_field, avg 3µs/call
292 unless $self->is_control_field;
293
294 $self->{_data} = $_[0] if @_;
295
296 return $self->{_data};
297}
298
299=head2 add_subfields(code,text[,code,text ...])
300
- -
309sub add_subfields {
310 my $self = shift;
311
312 croak( "Subfields are only for data fields (generally, just tags >= 010)" )
313 if $self->is_control_field;
314
315 push( @{$self->{_subfields}}, @_ );
316 return @_/2;
317}
318
319=head2 delete_subfield()
320
- -
345sub delete_subfield {
346 my ($self, %options) = @_;
347 my $codes = _normalize_arrayref($options{code});
348 my $positions = _normalize_arrayref($options{'pos'});
349 my $match = $options{match};
350
351 croak 'match must be a compiled regex'
352 if $match and ref($match) ne 'Regexp';
353
354 my @current_subfields = @{$self->{_subfields}};
355 my @new_subfields = ();
356 my $removed = 0;
357 my $subfield_num = $[ - 1; # users $[ preferences control indexing
358
359 while (@current_subfields > 0) {
360 $subfield_num += 1;
361 my $subfield_code = shift @current_subfields;
362 my $subfield_value = shift @current_subfields;
363 if ((@$codes==0 or grep {$_ eq $subfield_code} @$codes)
364 and (!$match or $subfield_value =~ $match)
365 and (@$positions==0 or grep {$_ == $subfield_num} @$positions)) {
366 $removed += 1;
367 next;
368 }
369 push( @new_subfields, $subfield_code, $subfield_value);
370 }
371 $self->{_subfields} = \@new_subfields;
372 return $removed;
373}
374
375=head2 delete_subfields()
376
- -
382sub delete_subfields {
383 my ($self, $code) = @_;
384 return $self->delete_subfield(code => $code);
385}
386
387=head2 update()
388
- -
418sub update {
419 my $self = shift;
420
421 ## tags 000 - 009 don't have indicators or subfields
422 if ( $self->is_control_field ) {
423 $self->{_data} = shift;
424 return(1);
425 }
426
427 ## otherwise we need to update subfields and indicators
428 my @data = @{$self->{_subfields}};
429 my $changes = 0;
430
431 while ( @_ ) {
432
433 my $arg = shift;
434 my $val = shift;
435
436 ## indicator update
437 if ($arg =~ /^ind[12]$/) {
438 $self->{"_$arg"} = $val;
439 $changes++;
440 }
441
442 ## subfield update
443 else {
444 my $found = 0;
445 ## update existing subfield
446 for ( my $i=0; $i<@data; $i+=2 ) {
447 if ($data[$i] eq $arg) {
448 $data[$i+1] = $val;
449 $found = 1;
450 $changes++;
451 last;
452 }
453 } # for
454
455 ## append new subfield
456 if ( !$found ) {
457 push( @data, $arg, $val );
458 $changes++;
459 }
460 }
461
462 } # while
463
464 ## synchronize our subfields
465 $self->{_subfields} = \@data;
466 return($changes);
467
468}
469
470=head2 replace_with()
471
- -
484
# spent 10.7ms (9.19+1.56) within MARC::Field::replace_with which was called 569 times, avg 19µs/call: # 512 times (7.53ms+1.34ms) by C4::Charset::SetUTF8Flag at line 148 of /usr/share/koha/lib/C4/Charset.pm, avg 17µs/call # 57 times (1.67ms+215µs) by C4::XSLT::transformMARCXML4XSLT at line 96 of /usr/share/koha/lib/C4/XSLT.pm, avg 33µs/call
sub replace_with {
485
486170711.2ms my ($self,$new) = @_;
4875691.56ms ref($new) =~ /^MARC::Field$/
# spent 1.56ms making 569 calls to MARC::Field::CORE:match, avg 3µs/call
488 or croak("Must pass a MARC::Field object");
489
490 %$self = %$new;
491
492}
493
494
495=head2 as_string( [$subfields] )
496
- -
520sub as_string() {
521 my $self = shift;
522 my $subfields = shift;
523
524 if ( $self->is_control_field ) {
525 return $self->{_data};
526 }
527
528 my @subs;
529
530 my $subs = $self->{_subfields};
531 my $nfields = @$subs / 2;
532 for my $i ( 1..$nfields ) {
533 my $offset = ($i-1)*2;
534 my $code = $subs->[$offset];
535 my $text = $subs->[$offset+1];
536 push( @subs, $text ) if !$subfields || $code =~ /^[$subfields]$/;
537 } # for
538
539 return join( " ", @subs );
540}
541
542
543=head2 as_formatted()
544
- -
549sub as_formatted() {
550 my $self = shift;
551
552 my @lines;
553
554 if ( $self->is_control_field ) {
555 push( @lines, sprintf( "%03s %s", $self->{_tag}, $self->{_data} ) );
556 } else {
557 my $hanger = sprintf( "%03s %1.1s%1.1s", $self->{_tag}, $self->{_ind1}, $self->{_ind2} );
558
559 my $subs = $self->{_subfields};
560 my $nfields = @$subs / 2;
561 my $offset = 0;
562 for my $i ( 1..$nfields ) {
563 push( @lines, sprintf( "%-6.6s _%1.1s%s", $hanger, $subs->[$offset++], $subs->[$offset++] ) );
564 $hanger = "";
565 } # for
566 }
567
568 return join( "\n", @lines );
569}
570
571
572=head2 as_usmarc()
573
- -
579sub as_usmarc() {
580 my $self = shift;
581
582 # Control fields are pretty easy
583 if ( $self->is_control_field ) {
584 return $self->data . END_OF_FIELD;
585 } else {
586 my @subs;
587 my @subdata = @{$self->{_subfields}};
588 while ( @subdata ) {
589 push( @subs, join( "", SUBFIELD_INDICATOR, shift @subdata, shift @subdata ) );
590 } # while
591
592 return
593 join( "",
594 $self->indicator(1),
595 $self->indicator(2),
596 @subs,
597 END_OF_FIELD, );
598 }
599}
600
601=head2 clone()
602
- -
615sub clone {
616 my $self = shift;
617
618 my $tagno = $self->{_tag};
619 my $is_control = $self->is_controlfield_tag($tagno);
620
621 my $clone =
622 bless {
623 _tag => $tagno,
624 _warnings => [],
625 _is_control_field => $is_control,
626 }, ref($self);
627
628 if ( $is_control ) {
629 $clone->{_data} = $self->{_data};
630 } else {
631 $clone->{_ind1} = $self->{_ind1};
632 $clone->{_ind2} = $self->{_ind2};
633 $clone->{_subfields} = [@{$self->{_subfields}}];
634 }
635
636 return $clone;
637}
638
639=head2 warnings()
640
- -
650
# spent 1.45ms within MARC::Field::warnings which was called 512 times, avg 3µs/call: # 512 times (1.45ms+0s) by MARC::File::USMARC::decode at line 223 of MARC/File/USMARC.pm, avg 3µs/call
sub warnings() {
65110241.70ms my $self = shift;
652
653 return @{$self->{_warnings}};
654}
655
656# NOTE: _warn is an object method
657sub _warn($) {
658 my $self = shift;
659
660 push( @{$self->{_warnings}}, join( "", @_ ) );
661}
662
663sub _gripe(@) {
664 $ERROR = join( "", @_ );
665
666 warn $ERROR;
667
668 return;
669}
670
671sub _normalize_arrayref {
672 my $ref = shift;
673 if (ref($ref) eq 'ARRAY') { return $ref }
674 elsif (defined $ref) { return [$ref] }
675 return [];
676}
677
678
67914µs1;
680
681__END__
 
# spent 16.8ms (16.1+613µs) within MARC::Field::CORE:match which was called 7585 times, avg 2µs/call: # 3172 times (4.34ms+0s) by MARC::Field::new at line 99, avg 1µs/call # 2194 times (4.46ms+613µs) by MARC::Field::is_controlfield_tag at line 198, avg 2µs/call # 1650 times (5.79ms+0s) by MARC::Field::new at line 82, avg 4µs/call # 569 times (1.56ms+0s) by MARC::Field::replace_with at line 487, avg 3µs/call
sub MARC::Field::CORE:match; # opcode