6
my $file = $ARGV[1] || 'test.xml';
7
my ( $root, $s, $s2, $s3, $usec, $usec2, $usec3, $sa, $sb, $sc, $base1, $base2, $base3 );
9
my $onlyone = $ARGV[2] ? 1 : 0;
11
tabit( "-Module-", 'load ', 'parse ', 'total' ) if ( !$onlyone );
13
exit if ( !$ARGV[0] );
15
use Time::HiRes qw(gettimeofday);
17
# For fairness; try to get the file to be read into memory cache
19
open( FILE, '<', $file ) or die "Couldn't open $!";
25
if ( $ARGV[0] * 1 >= 0 ) {
26
( $s, $usec ) = gettimeofday();
27
if ( eval('require XML::Bare;') ) {
28
( $s2, $usec2 ) = gettimeofday();
30
my $ob = new XML::Bare( file => $file );
33
( $s3, $usec3 ) = gettimeofday();
35
timeit( 'XML::Bare', 1 );
39
if ( $ARGV[0] eq '1' ) {
40
( $s, $usec ) = gettimeofday();
41
if ( eval('require XML::Bare;') ) {
42
( $s2, $usec2 ) = gettimeofday();
44
my $ob = new XML::Bare( file => $file );
45
my $root = $ob->simple();
47
( $s3, $usec3 ) = gettimeofday();
48
unload('XML::Bare (simple)');
49
timeit('XML::Bare (simple)');
53
if ( $ARGV[0] eq '2' ) {
54
( $s, $usec ) = gettimeofday();
55
if ( eval('require XML::TreePP;') ) {
56
( $s2, $usec2 ) = gettimeofday();
58
my $tpp = XML::TreePP->new();
59
my $tree = $tpp->parsefile($file);
61
( $s3, $usec3 ) = gettimeofday();
62
unload('XML::TreePP');
63
timeit('XML::TreePP');
67
if ( $ARGV[0] eq '3' ) {
68
( $s, $usec ) = gettimeofday();
69
if ( eval('require XML::Parser; require XML::Parser::EasyTree;') ) {
70
( $s2, $usec2 ) = gettimeofday();
72
my $p1 = new XML::Parser( Style => 'EasyTree' );
73
$root = $p1->parsefile($file);
75
( $s3, $usec3 ) = gettimeofday();
76
unload('XML::Parser::EasyTree');
77
timeit('XML::Parser::EasyTree');
81
if ( $ARGV[0] eq '4' ) {
82
( $s, $usec ) = gettimeofday();
83
if ( eval('require XML::Handler::Trees; require XML::Parser::PerlSAX;') ) {
84
( $s2, $usec2 ) = gettimeofday();
86
my $p = XML::Parser::PerlSAX->new();
87
my $h = XML::Handler::EasyTree->new();
88
$root = $p->parse( Handler => $h, Source => { SystemId => $file } );
90
( $s3, $usec3 ) = gettimeofday();
91
unload('XML::Handler::Trees');
92
timeit('XML::Handler::Trees');
96
if ( $ARGV[0] eq '5' ) {
97
( $s, $usec ) = gettimeofday();
98
if ( eval('require XML::Trivial;') ) {
99
( $s2, $usec2 ) = gettimeofday();
101
my $xml = XML::Trivial::parseFile($file);
103
( $s3, $usec3 ) = gettimeofday();
104
unload('XML::Trivial');
105
timeit('XML::Trivial');
109
if ( $ARGV[0] eq '6' ) {
110
( $s, $usec ) = gettimeofday();
111
if ( eval('require XML::Smart;') ) {
112
( $s2, $usec2 ) = gettimeofday();
114
my $XML = XML::Smart->new($file);
116
( $s3, $usec3 ) = gettimeofday();
117
unload('XML::Smart');
118
timeit('XML::Smart');
122
if ( $ARGV[0] eq '7' ) {
123
( $s, $usec ) = gettimeofday();
124
if ( eval('require XML::Simple;') ) {
125
( $s2, $usec2 ) = gettimeofday();
127
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
128
my $ref = XML::Simple::XMLin($file);
130
( $s3, $usec3 ) = gettimeofday();
131
unload('XML::Simple (XML::Parser)');
132
timeit('XML::Simple (XML::Parser)');
136
if ( $ARGV[0] eq '8' ) {
137
( $s, $usec ) = gettimeofday();
138
if ( eval('require XML::Simple;') ) {
139
( $s2, $usec2 ) = gettimeofday();
141
$XML::Simple::PREFERRED_PARSER = 'XML::SAX::PurePerl';
142
my $ref = XML::Simple::XMLin($file);
144
( $s3, $usec3 ) = gettimeofday();
145
unload('XML::Simple (PurePerl)');
146
timeit('XML::Simple (PurePerl)');
150
if ( $ARGV[0] eq '9' ) {
151
( $s, $usec ) = gettimeofday();
152
if ( eval('require XML::Simple;') ) {
153
( $s2, $usec2 ) = gettimeofday();
155
$XML::Simple::PREFERRED_PARSER = 'XML::LibXML::SAX::Parser';
156
my $ref = XML::Simple::XMLin($file);
158
( $s3, $usec3 ) = gettimeofday();
159
unload('XML::Simple (LibXML)');
160
timeit('XML::Simple (LibXML)');
164
if ( $ARGV[0] eq '10' ) {
165
( $s, $usec ) = gettimeofday();
166
if ( eval('require XML::Simple;') ) {
167
( $s2, $usec2 ) = gettimeofday();
169
$XML::Simple::PREFERRED_PARSER = 'XML::Bare::SAX::Parser';
170
my $ref = XML::Simple::XMLin($file);
172
( $s3, $usec3 ) = gettimeofday();
173
unload('XML::Simple (XML Bare)');
174
timeit('XML::Simple (XML Bare)');
178
if ( $ARGV[0] eq '11' ) {
179
( $s, $usec ) = gettimeofday();
180
if ( eval('require XML::Bare::Simple;') ) {
181
( $s2, $usec2 ) = gettimeofday();
183
my $ref = XML::Bare::Simple::XMLin($file);
185
( $s3, $usec3 ) = gettimeofday();
186
unload('XML::Bare::Simple');
187
timeit('XML::Bare::Simple');
191
if ( $ARGV[0] eq '12' ) {
192
( $s, $usec ) = gettimeofday();
193
if ( eval('require XML::SAX::Simple;') ) {
194
( $s2, $usec2 ) = gettimeofday();
196
my $ref = XML::SAX::Simple::XMLin($file);
198
( $s3, $usec3 ) = gettimeofday();
199
unload('XML::SAX::Simple');
200
timeit('XML::SAX::Simple');
204
if ( $ARGV[0] eq '13' ) {
205
( $s, $usec ) = gettimeofday();
206
if ( eval('require XML::Twig;') ) {
207
( $s2, $usec2 ) = gettimeofday();
209
my $t = XML::Twig->new->parsefile($file);
210
$root = $t->root->simplify;
212
( $s3, $usec3 ) = gettimeofday();
218
if ( $ARGV[0] eq '14' ) {
219
( $s, $usec ) = gettimeofday();
220
if ( eval('require XML::Grove::Builder; require XML::Parser::PerlSAX;') ) {
221
( $s2, $usec2 ) = gettimeofday();
223
my $grove_builder = XML::Grove::Builder->new;
224
my $parser = XML::Parser::PerlSAX->new( Handler => $grove_builder );
225
my $document = $parser->parse( Source => { SystemId => $file } );
227
( $s3, $usec3 ) = gettimeofday();
228
unload('XML::Grove::Builder');
229
timeit('XML::Grove::Builder');
233
if ( $ARGV[0] eq '15' ) {
234
( $s, $usec ) = gettimeofday();
235
if ( eval('require XML::XPath::XMLParser;') ) {
236
( $s2, $usec2 ) = gettimeofday();
238
my $parser = XML::XPath::XMLParser->new;
239
my $tree = $parser->parsefile($file);
241
( $s3, $usec3 ) = gettimeofday();
242
unload('XML::XPath::XMLParser');
243
timeit('XML::XPath::XMLParser');
247
if ( $ARGV[0] eq '16' ) {
248
( $s, $usec ) = gettimeofday();
249
if ( eval('require XML::DOM::Lite;') ) {
250
( $s2, $usec2 ) = gettimeofday();
252
my $doc = XML::DOM::Lite::Parser->parseFile($file);
254
( $s3, $usec3 ) = gettimeofday();
255
unload('XML::DOM::Lite');
256
timeit('XML::DOM::Lite');
260
if ( $ARGV[0] eq '17' ) {
261
( $s, $usec ) = gettimeofday();
262
if ( eval('require XML::Tiny;') ) {
263
( $s2, $usec2 ) = gettimeofday();
266
open( $xmlfile, $file );
267
my $doc = XML::Tiny::parsefile($xmlfile);
269
( $s3, $usec3 ) = gettimeofday();
275
if ( $ARGV[0] eq '18' ) {
276
( $s, $usec ) = gettimeofday();
277
if ( eval('require XML::MyXML;') ) {
278
( $s2, $usec2 ) = gettimeofday();
280
my $ob = XML::MyXML::xml_to_object( $file, { file => 1 } );
282
( $s3, $usec3 ) = gettimeofday();
283
unload('XML::MyXML');
284
timeit('XML::MyXML');
288
if ( $ARGV[0] eq '19' ) {
289
( $s, $usec ) = gettimeofday();
290
if ( eval('require XML::TinyXML;') ) {
291
( $s2, $usec2 ) = gettimeofday();
293
my $ob = XML::TinyXML->new();
294
$ob->loadFile($file);
296
( $s3, $usec3 ) = gettimeofday();
297
unload('XML::TinyXML');
298
timeit('XML::TinyXML');
304
my @parts = split( ' ', $module );
306
$module =~ s/::/\//g;
308
delete $INC{$module};
314
$sa = $s2 - $s + ( ( $usec2 - $usec ) / 1000000 );
315
$sb = $s3 - $s2 + ( ( $usec3 - $usec2 ) / 1000000 );
316
$sc = $s3 - $s + ( ( $usec3 - $usec ) / 1000000 );
328
if ( !$base || !$onlyone ) {
329
tabit( $name, $sa, $sb, $sc );
334
my ( $a, $b, $c, $d ) = @_;
335
my $len = length($a);
337
for ( 0 .. ( $maxlen - $len ) ) { print ' '; }
348
my $len = length($a);
349
if ( $len > 8 ) { $a = substr( $a, 8 ); }