Profile of /usr/local/lib/perl5/5.10.1/darwin-2level/MIME/Base64.pm

← 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:23:04 2010

File | /usr/local/lib/perl5/5.10.1/darwin-2level/MIME/Base64.pm
Statements Executed | 15
Statement Execution Time | 366µs

Subroutines — ordered by exclusive time
Calls | P | F | Exclusive Time | Inclusive Time | Subroutine
--- | --- | --- | --- | --- | ---
1 | 1 | 1 | 16µs | 20µs | MIME::Base64::::BEGIN@3MIME::Base64::BEGIN@3
1 | 1 | 1 | 7µs | 46µs | MIME::Base64::::BEGIN@4MIME::Base64::BEGIN@4

Call graph for these subroutines as a Graphviz dot language file.

Line | State ments | Time on line | Calls | Time in subs | Code
--- | --- | --- | --- | --- | ---
1 |  |  |  |  | package MIME::Base64;
2 |  |  |  |  |
3 | 3 | 27µs | 2 | 23µs | # spent 20µs (16+3) within MIME::Base64::BEGIN@3 which was called # once (16µs+3µs) by SimpleDB::Client::BEGIN@52 at line 3 use strict; # spent 20µs making 1 call to MIME::Base64::BEGIN@3 # spent 3µs making 1 call to strict::import
4 | 3 | 73µs | 2 | 84µs | # spent 46µs (7+39) within MIME::Base64::BEGIN@4 which was called # once (7µs+39µs) by SimpleDB::Client::BEGIN@52 at line 4 use vars qw(@ISA @EXPORT $VERSION); # spent 46µs making 1 call to MIME::Base64::BEGIN@4 # spent 39µs making 1 call to vars::import
5 |  |  |  |  |
6 | 1 | 400ns |  |  | require Exporter;
7 | 1 | 7µs |  |  | @ISA = qw(Exporter);
8 | 1 | 600ns |  |  | @EXPORT = qw(encode_base64 decode_base64);
9 |  |  |  |  |
10 | 1 | 200ns |  |  | $VERSION = '3.08';
11 |  |  |  |  |
12 | 1 | 400ns |  |  | require XSLoader;
13 | 1 | 241µs | 1 | 235µs | XSLoader::load('MIME::Base64', $VERSION); # spent 235µs making 1 call to XSLoader::load
14 |  |  |  |  |
15 | 1 | 1µs |  |  | *encode = \&encode_base64;
16 | 1 | 300ns |  |  | *decode = \&decode_base64;
17 |  |  |  |  |
18 | 1 | 16µs |  |  | 1;
19 |  |  |  |  |
20 |  |  |  |  | __END__
21 |  |  |  |  |
22 |  |  |  |  | =head1 NAME
23 |  |  |  |  |
24 |  |  |  |  | MIME::Base64 - Encoding and decoding of base64 strings
25 |  |  |  |  |
26 |  |  |  |  | =head1 SYNOPSIS
27 |  |  |  |  |
28 |  |  |  |  | use MIME::Base64;
29 |  |  |  |  |
30 |  |  |  |  | $encoded = encode_base64('Aladdin:open sesame');
31 |  |  |  |  | $decoded = decode_base64($encoded);
32 |  |  |  |  |
33 |  |  |  |  | =head1 DESCRIPTION
34 |  |  |  |  |
35 |  |  |  |  | This module provides functions to encode and decode strings into and from the
36 |  |  |  |  | base64 encoding specified in RFC 2045 - I<MIME (Multipurpose Internet
37 |  |  |  |  | Mail Extensions)>. The base64 encoding is designed to represent
38 |  |  |  |  | arbitrary sequences of octets in a form that need not be humanly
39 |  |  |  |  | readable. A 65-character subset ([A-Za-z0-9+/=]) of US-ASCII is used,
40 |  |  |  |  | enabling 6 bits to be represented per printable character.
41 |  |  |  |  |
42 |  |  |  |  | The following functions are provided:
43 |  |  |  |  |
44 |  |  |  |  | =over 4
45 |  |  |  |  |
46 |  |  |  |  | =item encode_base64($str)
47 |  |  |  |  |
48 |  |  |  |  | =item encode_base64($str, $eol);
49 |  |  |  |  |
50 |  |  |  |  | Encode data by calling the encode_base64() function. The first
51 |  |  |  |  | argument is the string to encode. The second argument is the
52 |  |  |  |  | line-ending sequence to use. It is optional and defaults to "\n". The
53 |  |  |  |  | returned encoded string is broken into lines of no more than 76
54 |  |  |  |  | characters each and it will end with $eol unless it is empty. Pass an
55 |  |  |  |  | empty string as second argument if you do not want the encoded string
56 |  |  |  |  | to be broken into lines.
57 |  |  |  |  |
58 |  |  |  |  | =item decode_base64($str)
59 |  |  |  |  |
60 |  |  |  |  | Decode a base64 string by calling the decode_base64() function. This
61 |  |  |  |  | function takes a single argument which is the string to decode and
62 |  |  |  |  | returns the decoded data.
63 |  |  |  |  |
64 |  |  |  |  | Any character not part of the 65-character base64 subset is
65 |  |  |  |  | silently ignored. Characters occurring after a '=' padding character
66 |  |  |  |  | are never decoded.
67 |  |  |  |  |
68 |  |  |  |  | If the length of the string to decode, after ignoring
69 |  |  |  |  | non-base64 chars, is not a multiple of 4 or if padding occurs too early,
70 |  |  |  |  | then a warning is generated if perl is running under C<-w>.
71 |  |  |  |  |
72 |  |  |  |  | =back
73 |  |  |  |  |
74 |  |  |  |  | If you prefer not to import these routines into your namespace, you can
75 |  |  |  |  | call them as:
76 |  |  |  |  |
77 |  |  |  |  | use MIME::Base64 ();
78 |  |  |  |  | $encoded = MIME::Base64::encode($decoded);
79 |  |  |  |  | $decoded = MIME::Base64::decode($encoded);
80 |  |  |  |  |
81 |  |  |  |  | =head1 DIAGNOSTICS
82 |  |  |  |  |
83 |  |  |  |  | The following warnings can be generated if perl is invoked with the
84 |  |  |  |  | C<-w> switch:
85 |  |  |  |  |
86 |  |  |  |  | =over 4
87 |  |  |  |  |
88 |  |  |  |  | =item Premature end of base64 data
89 |  |  |  |  |
90 |  |  |  |  | The number of characters to decode is not a multiple of 4. Legal
91 |  |  |  |  | base64 data should be padded with one or two "=" characters to make
92 |  |  |  |  | its length a multiple of 4. The decoded result will be the same
93 |  |  |  |  | whether the padding is present or not.
94 |  |  |  |  |
95 |  |  |  |  | =item Premature padding of base64 data
96 |  |  |  |  |
97 |  |  |  |  | The '=' padding character occurs as the first or second character
98 |  |  |  |  | in a base64 quartet.
99 |  |  |  |  |
100 |  |  |  |  | =back
101 |  |  |  |  |
102 |  |  |  |  | The following exception can be raised:
103 |  |  |  |  |
104 |  |  |  |  | =over 4
105 |  |  |  |  |
106 |  |  |  |  | =item Wide character in subroutine entry
107 |  |  |  |  |
108 |  |  |  |  | The string passed to encode_base64() contains characters with code
109 |  |  |  |  | above 255. The base64 encoding is only defined for single-byte
110 |  |  |  |  | characters. Use the Encode module to select the byte encoding you
111 |  |  |  |  | want.
112 |  |  |  |  |
113 |  |  |  |  | =back
114 |  |  |  |  |
115 |  |  |  |  | =head1 EXAMPLES
116 |  |  |  |  |
117 |  |  |  |  | If you want to encode a large file, you should encode it in chunks
118 |  |  |  |  | that are a multiple of 57 bytes. This ensures that the base64 lines
119 |  |  |  |  | line up and that you do not end up with padding in the middle. 57
120 |  |  |  |  | bytes of data fills one complete base64 line (76 == 57*4/3):
121 |  |  |  |  |
122 |  |  |  |  | use MIME::Base64 qw(encode_base64);
123 |  |  |  |  |
124 |  |  |  |  | open(FILE, "/var/log/wtmp") or die "$!";
125 |  |  |  |  | while (read(FILE, $buf, 60*57)) {
126 |  |  |  |  | print encode_base64($buf);
127 |  |  |  |  | }
128 |  |  |  |  |
129 |  |  |  |  | or if you know you have enough memory
130 |  |  |  |  |
131 |  |  |  |  | use MIME::Base64 qw(encode_base64);
132 |  |  |  |  | local($/) = undef; # slurp
133 |  |  |  |  | print encode_base64(<STDIN>);
134 |  |  |  |  |
135 |  |  |  |  | The same approach as a command line:
136 |  |  |  |  |
137 |  |  |  |  | perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' <file
138 |  |  |  |  |
139 |  |  |  |  | Decoding does not need slurp mode if every line contains a multiple
140 |  |  |  |  | of four base64 chars:
141 |  |  |  |  |
142 |  |  |  |  | perl -MMIME::Base64 -ne 'print decode_base64($_)' <file
143 |  |  |  |  |
144 |  |  |  |  | Perl v5.8 and better allow extended Unicode characters in strings.
145 |  |  |  |  | Such strings cannot be encoded directly, as the base64
146 |  |  |  |  | encoding is only defined for single-byte characters. The solution is
147 |  |  |  |  | to use the Encode module to select the byte encoding you want. For
148 |  |  |  |  | example:
149 |  |  |  |  |
150 |  |  |  |  | use MIME::Base64 qw(encode_base64);
151 |  |  |  |  | use Encode qw(encode);
152 |  |  |  |  |
153 |  |  |  |  | $encoded = encode_base64(encode("UTF-8", "\x{FFFF}\n"));
154 |  |  |  |  | print $encoded;
155 |  |  |  |  |
156 |  |  |  |  | =head1 COPYRIGHT
157 |  |  |  |  |
158 |  |  |  |  | Copyright 1995-1999, 2001-2004 Gisle Aas.
159 |  |  |  |  |
160 |  |  |  |  | This library is free software; you can redistribute it and/or
161 |  |  |  |  | modify it under the same terms as Perl itself.
162 |  |  |  |  |
163 |  |  |  |  | Distantly based on LWP::Base64 written by Martijn Koster
164 |  |  |  |  | <m.koster@nexor.co.uk> and Joerg Reichelt <j.reichelt@nexor.co.uk> and
165 |  |  |  |  | code posted to comp.lang.perl <3pd2lp$6gf@wsinti07.win.tue.nl> by Hans
166 |  |  |  |  | Mulder <hansm@wsinti07.win.tue.nl>
167 |  |  |  |  |
168 |  |  |  |  | The XS implementation uses code from metamail. Copyright 1991 Bell
169 |  |  |  |  | Communications Research, Inc. (Bellcore)
170 |  |  |  |  |
171 |  |  |  |  | =head1 SEE ALSO
172 |  |  |  |  |
173 |  |  |  |  | L<MIME::QuotedPrint>
174 |  |  |  |  |
175 |  |  |  |  | =cut