=head1 NAME
XML::Compile::Dumper - Remember precompiled XML processors
=head1 SYNOPSIS
my
$reader
=
$schema
->compile(
READER
=>
'{myns}mytype'
);
my
$writer
=
$schema
->compile(
WRITER
=> ...);
my
$dumper
= XML::Compile::Dumper->new
(
package
=>
'My::Package'
,
filename
=>
'My/Package.pm'
);
$dumper
->freeze(
foo
=>
$reader
,
bar
=>
$writer
);
$dumper
->
close
;
my
$hash
= foo(
$xml
);
my
$doc
= bar(
$doc
,
$xml
);
=head1 DESCRIPTION
This module simplifies the task of saving and loading pre-compiled
translators. Schema's can get huge, and
when
you are not creating a
daemon to
do
the XML communication, you may end-up compiling and
interpreting these large schemas often, just to be able to process
simple data-structures.
Based on the excellent module Data::Dump::Streamer, this module
helps you create standard Perl packages which contain the reader
and writer code references.
WARNING: this feature was introduced in release 0.17. Using perl
5.8.8, libxml 2.6.26, XML::LibXML 2.60, and Data::Dump::Streamer
2.03, Perl complains about C<"PmmREFCNT_dec: REFCNT decremented below
0! during global destruction.">
when
the tests are run. This bug
can be anywhere. Therefore, these tests are disabled by
default
in
t/TestTools.pm. If you have
time
, could you please run the tests
with
C<
$skip_dumper
= 0;> and report the results to the author?
=head1 METHODS
=head2 Constructors
$obj
-E<gt>B<
close
>
=over 4
Finalize the produced file. This will be called automatically
if
the objects goes out-of-scope.
=back
XML::Compile::Dumper-E<gt>B<new>(OPTIONS)
=over 4
Create an object which will collect the information
for
the output
file. You have to specify either a C<filehandle> or a C<filename>.
A filehandle will be closed
after
processing.
Option --Default
filehandle
undef
filename
undef
package
<required>
.
filehandle
=> C<IO::Handle>
.
filename
=> FILENAME
=over 4
The file will be written using utf8 encoding, using IO::File. If
you want something
else
,
open
your filehandle first, and provide that
as argument.
=back
.
package
=> PACKAGE
=over 4
The name-space which will be used: it will produce a C<
package
>
line in the output.
=back
=back
=head2 Accessors
$obj
-E<gt>B<file>
=over 4
Returns the output file-handle, which you may
use
to add extensions to
the module.
=back
=head2 Producers
$obj
-E<gt>B<footer>(FILEHANDLE)
=over 4
=back
$obj
-E<gt>B<freeze>(PAIRS|HASH)
=over 4
Produce the
dump
for
a group of code references, which will be
made available under a normal subroutine name. This method
can only be called once.
=back
$obj
-E<gt>B<header>(FILEHANDLE, PACKAGE)
=over 4
Prints the header text to the file.
=back
=head1 DIAGNOSTICS
Error: either filename or filehandle required
=over 4
=back
Error: freeze can only be called once
=over 4
The various closures may have related variables, and therefore
need to be dumped in one go.
=back
Error: freeze needs PAIRS or a HASH
=over 4
=back
Error:
package
name required
=over 4
The perl module which is produced is cleanly encapsulating the
produced program text in a perl
package
name-space. The name
has
to be provided.
=back
Error: value
with
$name
is not a code reference
=over 4
=back
=head1 SEE ALSO
This module is part of XML-Compile-Dumper distribution version 0.13,
All modules in this suite:
L<XML::Compile>,
L<XML::Compile::SOAP>,
L<XML::Compile::SOAP12>,
L<XML::Compile::SOAP::Daemon>,
L<XML::Compile::Tester>,
L<XML::Compile::Cache>,
L<XML::Compile::Dumper>,
L<XML::Compile::RPC>,
and
L<XML::Rewrite>,
L<XML::ExistDB>,
L<XML::LibXML::Simple>.
Please post questions or ideas to the mailinglist at
For life contact
with
other developers, visit the C<
on C<irc.perl.org>.
=head1 LICENSE
Copyrights 2007-2010 by Mark Overmeer. For other contributors see ChangeLog.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.