← Index
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:23 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/x86_64-linux/Encode.pm
StatementsExecuted 123 statements in 1.54ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.57ms1.87msEncode::::BEGIN@56 Encode::BEGIN@56
1111.20ms1.51msEncode::::BEGIN@53 Encode::BEGIN@53
111317µs350µsEncode::::BEGIN@54 Encode::BEGIN@54
72116µs16µsEncode::::define_encoding Encode::define_encoding
11114µs25µsEncode::::onBOOT Encode::onBOOT (xsub)
1119µs153µsEncode::::BEGIN@9 Encode::BEGIN@9
1119µs10µsEncode::utf8::::BEGIN@229 Encode::utf8::BEGIN@229
1119µs10µsEncode::::BEGIN@5 Encode::BEGIN@5
1117µs16µsEncode::::BEGIN@15 Encode::BEGIN@15
1116µs467µsEncode::UTF_EBCDIC::::BEGIN@178Encode::UTF_EBCDIC::BEGIN@178
1115µs18µsEncode::XS::::BEGIN@210 Encode::XS::BEGIN@210
1114µs17µsEncode::utf8::::BEGIN@215 Encode::utf8::BEGIN@215
1114µs25µsEncode::::BEGIN@7 Encode::BEGIN@7
1113µs19µsEncode::::BEGIN@6 Encode::BEGIN@6
1112µs2µsEncode::::BEGIN@17 Encode::BEGIN@17
111600ns600nsEncode::::__ANON__ Encode::__ANON__ (xsub)
0000s0sEncode::UTF_EBCDIC::::decodeEncode::UTF_EBCDIC::decode
0000s0sEncode::UTF_EBCDIC::::encodeEncode::UTF_EBCDIC::encode
0000s0sEncode::::clone_encoding Encode::clone_encoding
0000s0sEncode::::define_alias Encode::define_alias
0000s0sEncode::::encodings Encode::encodings
0000s0sEncode::::find_alias Encode::find_alias
0000s0sEncode::::find_encoding Encode::find_encoding
0000s0sEncode::::find_mime_encoding Encode::find_mime_encoding
0000s0sEncode::::getEncoding Encode::getEncoding
0000s0sEncode::::perlio_ok Encode::perlio_ok
0000s0sEncode::::resolve_alias Encode::resolve_alias
0000s0sEncode::utf8::::cat_decode Encode::utf8::cat_decode
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2# $Id: Encode.pm,v 3.21 2024/02/25 22:17:32 dankogai Exp $
3#
4package Encode;
5216µs212µs
# spent 10µs (9+2) within Encode::BEGIN@5 which was called: # once (9µs+2µs) by Archive::Zip::Archive::BEGIN@12 at line 5
use strict;
# spent 10µs making 1 call to Encode::BEGIN@5 # spent 2µs making 1 call to strict::import
6219µs235µs
# spent 19µs (3+16) within Encode::BEGIN@6 which was called: # once (3µs+16µs) by Archive::Zip::Archive::BEGIN@12 at line 6
use warnings;
# spent 19µs making 1 call to Encode::BEGIN@6 # spent 16µs making 1 call to warnings::import
7248µs246µs
# spent 25µs (4+21) within Encode::BEGIN@7 which was called: # once (4µs+21µs) by Archive::Zip::Archive::BEGIN@12 at line 7
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
# spent 25µs making 1 call to Encode::BEGIN@7 # spent 21µs making 1 call to constant::import
8our $VERSION;
9
# spent 153µs (9+144) within Encode::BEGIN@9 which was called: # once (9µs+144µs) by Archive::Zip::Archive::BEGIN@12 at line 13
BEGIN {
1017µs13µs $VERSION = sprintf "%d.%02d", q$Revision: 3.21 $ =~ /(\d+)/g;
# spent 3µs making 1 call to CORE::match
111200ns require XSLoader;
121146µs1141µs XSLoader::load( __PACKAGE__, $VERSION );
# spent 141µs making 1 call to XSLoader::load
13125µs1153µs}
# spent 153µs making 1 call to Encode::BEGIN@9
14
15321µs325µs
# spent 16µs (7+9) within Encode::BEGIN@15 which was called: # once (7µs+9µs) by Archive::Zip::Archive::BEGIN@12 at line 15
use Exporter 5.57 'import';
# spent 16µs making 1 call to Encode::BEGIN@15 # spent 5µs making 1 call to UNIVERSAL::VERSION # spent 4µs making 1 call to Exporter::import
16
17293µs12µs
# spent 2µs within Encode::BEGIN@17 which was called: # once (2µs+0s) by Archive::Zip::Archive::BEGIN@12 at line 17
use Carp ();
# spent 2µs making 1 call to Encode::BEGIN@17
181700nsour @CARP_NOT = qw(Encode::Encoder);
19
20# Public, encouraged API is exported by default
21
2211µsour @EXPORT = qw(
23 decode decode_utf8 encode encode_utf8 str2bytes bytes2str
24 encodings find_encoding find_mime_encoding clone_encoding
25);
261600nsour @FB_FLAGS = qw(
27 DIE_ON_ERR WARN_ON_ERR RETURN_ON_ERR LEAVE_SRC
28 PERLQQ HTMLCREF XMLCREF STOP_AT_PARTIAL
29);
301400nsour @FB_CONSTS = qw(
31 FB_DEFAULT FB_CROAK FB_QUIET FB_WARN
32 FB_PERLQQ FB_HTMLCREF FB_XMLCREF
33);
3411µsour @EXPORT_OK = (
35 qw(
36 _utf8_off _utf8_on define_encoding from_to is_16bit is_8bit
37 is_utf8 perlio_ok resolve_alias utf8_downgrade utf8_upgrade
38 ),
39 @FB_FLAGS, @FB_CONSTS,
40);
41
4214µsour %EXPORT_TAGS = (
43 all => [ @EXPORT, @EXPORT_OK ],
44 default => [ @EXPORT ],
45 fallbacks => [ @FB_CONSTS ],
46 fallback_all => [ @FB_CONSTS, @FB_FLAGS ],
47);
48
49# Documentation moved after __END__ for speed - NI-S
50
511300nsour $ON_EBCDIC = ( ord("A") == 193 );
52
53276µs11.51ms
# spent 1.51ms (1.20+314µs) within Encode::BEGIN@53 which was called: # once (1.20ms+314µs) by Archive::Zip::Archive::BEGIN@12 at line 53
use Encode::Alias ();
# spent 1.51ms making 1 call to Encode::BEGIN@53
54283µs2350µs
# spent 350µs (317+33) within Encode::BEGIN@54 which was called: # once (317µs+33µs) by Archive::Zip::Archive::BEGIN@12 at line 54
use Encode::MIME::Name;
# spent 350µs making 1 call to Encode::BEGIN@54 # spent 600ns making 1 call to Encode::__ANON__
55
562524µs21.89ms
# spent 1.87ms (1.57+302µs) within Encode::BEGIN@56 which was called: # once (1.57ms+302µs) by Archive::Zip::Archive::BEGIN@12 at line 56
use Storable;
# spent 1.87ms making 1 call to Encode::BEGIN@56 # spent 20µs making 1 call to Exporter::import
57
58# Make a %Encoding package variable to allow a certain amount of cheating
59our %Encoding;
60our %ExtModule;
61185µsrequire Encode::Config;
62# See
63# https://bugzilla.redhat.com/show_bug.cgi?id=435505#c2
64# to find why sig handlers inside eval{} are disabled.
651200nseval {
6611µs local $SIG{__DIE__};
671500ns local $SIG{__WARN__};
681900ns local @INC = @INC;
691500ns pop @INC if @INC && $INC[-1] eq '.';
70126µs require Encode::ConfigLocal;
71};
72
73sub encodings {
74 my %enc;
75 my $arg = $_[1] || '';
76 if ( $arg eq ":all" ) {
77 %enc = ( %Encoding, %ExtModule );
78 }
79 else {
80 %enc = %Encoding;
81 for my $mod ( map { m/::/ ? $_ : "Encode::$_" } @_ ) {
82 DEBUG and warn $mod;
83 for my $enc ( keys %ExtModule ) {
84 $ExtModule{$enc} eq $mod and $enc{$enc} = $mod;
85 }
86 }
87 }
88 return sort { lc $a cmp lc $b }
89 grep { !/^(?:Internal|Unicode|Guess)$/o } keys %enc;
90}
91
92sub perlio_ok {
93 my $obj = ref( $_[0] ) ? $_[0] : find_encoding( $_[0] );
94 $obj->can("perlio_ok") and return $obj->perlio_ok();
95 return 0; # safety net
96}
97
98
# spent 16µs within Encode::define_encoding which was called 7 times, avg 2µs/call: # 5 times (12µs+0s) by Encode::onBOOT at line 174, avg 2µs/call # 2 times (4µs+0s) by Archive::Zip::Archive::BEGIN@12 at line 222, avg 2µs/call
sub define_encoding {
997500ns my $obj = shift;
10071µs my $name = shift;
10172µs $Encoding{$name} = $obj;
10272µs my $lc = lc($name);
1037800ns define_alias( $lc => $obj ) unless $lc eq $name;
10471µs while (@_) {
105 my $alias = shift;
106 define_alias( $alias, $obj );
107 }
10871µs my $class = ref($obj);
10973µs push @Encode::CARP_NOT, $class unless grep { $_ eq $class } @Encode::CARP_NOT;
11072µs push @Encode::Encoding::CARP_NOT, $class unless grep { $_ eq $class } @Encode::Encoding::CARP_NOT;
11177µs return $obj;
112}
113
114sub getEncoding {
115 my ( $class, $name, $skip_external ) = @_;
116
117 defined($name) or return;
118
119 $name =~ s/\s+//g; # https://rt.cpan.org/Ticket/Display.html?id=65796
120
121 ref($name) && $name->can('renew') and return $name;
122 exists $Encoding{$name} and return $Encoding{$name};
123 my $lc = lc $name;
124 exists $Encoding{$lc} and return $Encoding{$lc};
125
126 my $oc = $class->find_alias($name);
127 defined($oc) and return $oc;
128 $lc ne $name and $oc = $class->find_alias($lc);
129 defined($oc) and return $oc;
130
131 unless ($skip_external) {
132 if ( my $mod = $ExtModule{$name} || $ExtModule{$lc} ) {
133 $mod =~ s,::,/,g;
134 $mod .= '.pm';
135 eval { require $mod; };
136 exists $Encoding{$name} and return $Encoding{$name};
137 }
138 }
139 return;
140}
141
142# HACK: These two functions must be defined in Encode and because of
143# cyclic dependency between Encode and Encode::Alias, Exporter does not work
144sub find_alias {
145 goto &Encode::Alias::find_alias;
146}
147sub define_alias {
148 goto &Encode::Alias::define_alias;
149}
150
151sub find_encoding($;$) {
152 my ( $name, $skip_external ) = @_;
153 return __PACKAGE__->getEncoding( $name, $skip_external );
154}
155
156sub find_mime_encoding($;$) {
157 my ( $mime_name, $skip_external ) = @_;
158 my $name = Encode::MIME::Name::get_encode_name( $mime_name );
159 return find_encoding( $name, $skip_external );
160}
161
162sub resolve_alias($) {
163 my $obj = find_encoding(shift);
164 defined $obj and return $obj->name;
165 return;
166}
167
168sub clone_encoding($) {
169 my $obj = find_encoding(shift);
170 ref $obj or return;
171 return Storable::dclone($obj);
172}
173
174113µs637µsonBOOT;
# spent 25µs making 1 call to Encode::onBOOT # spent 12µs making 5 calls to Encode::define_encoding, avg 2µs/call
175
1761200nsif ($ON_EBCDIC) {
177 package Encode::UTF_EBCDIC;
1782122µs2929µs
# spent 467µs (6+462) within Encode::UTF_EBCDIC::BEGIN@178 which was called: # once (6µs+462µs) by Archive::Zip::Archive::BEGIN@12 at line 178
use parent 'Encode::Encoding';
# spent 467µs making 1 call to Encode::UTF_EBCDIC::BEGIN@178 # spent 462µs making 1 call to parent::import
179 my $obj = bless { Name => "UTF_EBCDIC" } => "Encode::UTF_EBCDIC";
180 Encode::define_encoding($obj, 'Unicode');
181 sub decode {
182 my ( undef, $str, $chk ) = @_;
183 my $res = '';
184 for ( my $i = 0 ; $i < length($str) ; $i++ ) {
185 $res .=
186 chr(
187 utf8::unicode_to_native( ord( substr( $str, $i, 1 ) ) )
188 );
189 }
190 $_[1] = '' if $chk;
191 return $res;
192 }
193 sub encode {
194 my ( undef, $str, $chk ) = @_;
195 my $res = '';
196 for ( my $i = 0 ; $i < length($str) ; $i++ ) {
197 $res .=
198 chr(
199 utf8::native_to_unicode( ord( substr( $str, $i, 1 ) ) )
200 );
201 }
202 $_[1] = '' if $chk;
203 return $res;
204 }
205}
206
207{
208 # https://rt.cpan.org/Public/Bug/Display.html?id=103253
209 package Encode::XS;
210227µs231µs
# spent 18µs (5+13) within Encode::XS::BEGIN@210 which was called: # once (5µs+13µs) by Archive::Zip::Archive::BEGIN@12 at line 210
use parent 'Encode::Encoding';
# spent 18µs making 1 call to Encode::XS::BEGIN@210 # spent 13µs making 1 call to parent::import
211}
212
213{
2141300ns package Encode::utf8;
215285µs230µs
# spent 17µs (4+13) within Encode::utf8::BEGIN@215 which was called: # once (4µs+13µs) by Archive::Zip::Archive::BEGIN@12 at line 215
use parent 'Encode::Encoding';
# spent 17µs making 1 call to Encode::utf8::BEGIN@215 # spent 13µs making 1 call to parent::import
21612µs my %obj = (
217 'utf8' => { Name => 'utf8' },
218 'utf-8-strict' => { Name => 'utf-8-strict', strict_utf8 => 1 }
219 );
22011µs for ( keys %obj ) {
2212500ns bless $obj{$_} => __PACKAGE__;
22221µs24µs Encode::define_encoding( $obj{$_} => $_ );
# spent 4µs making 2 calls to Encode::define_encoding, avg 2µs/call
223 }
224 sub cat_decode {
225 # ($obj, $dst, $src, $pos, $trm, $chk)
226 # currently ignores $chk
227 my ( undef, undef, undef, $pos, $trm ) = @_;
228 my ( $rdst, $rsrc, $rpos ) = \@_[ 1, 2, 3 ];
229280µs212µs
# spent 10µs (9+1) within Encode::utf8::BEGIN@229 which was called: # once (9µs+1µs) by Archive::Zip::Archive::BEGIN@12 at line 229
use bytes;
# spent 10µs making 1 call to Encode::utf8::BEGIN@229 # spent 1µs making 1 call to bytes::import
230 if ( ( my $npos = index( $$rsrc, $trm, $pos ) ) >= 0 ) {
231 $$rdst .=
232 substr( $$rsrc, $pos, $npos - $pos + length($trm) );
233 $$rpos = $npos + length($trm);
234 return 1;
235 }
236 $$rdst .= substr( $$rsrc, $pos );
237 $$rpos = length($$rsrc);
238 return '';
239 }
240}
241
242210µs1;
243
244__END__
 
# spent 600ns within Encode::__ANON__ which was called: # once (600ns+0s) by Encode::BEGIN@54 at line 54
sub Encode::__ANON__; # xsub
# spent 25µs (14+12) within Encode::onBOOT which was called: # once (14µs+12µs) by Archive::Zip::Archive::BEGIN@12 at line 174
sub Encode::onBOOT; # xsub