XML::Compile::Dumper3pm
Remember precompiled xml processors
Usage
# create readers and writers or soap thingsmy $reader = $schema->compile(READER => '{myns}mytype');my $writer = $schema->compile(WRITER => ...);# then dump them into a packagemy $dumper = XML::Compile::Dumper->new(package => 'My::Package', filename => 'My/Package.pm');$dumper->freeze(foo => $reader, bar => $writer);$dumper->close;# later, they can get recalled usinguse My::Package;my $hash = foo($xml);my $doc = bar($doc, $xml);
Overview
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 "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 "$skip_dumper = 0;" and report the results to the author?
Methods
Constructors
- $obj->
close() -
Finalize the produced file. This will be called automatically if the objects goes out-of-scope.
- XML::Compile::Dumper->
new(%options) -
Create an object which will collect the information for the output file. You have to specify either a
"filehandle"or a"filename". A filehandle will be closed after processing.-Option --Defaultfilehandle undeffilename undefpackage <required>- filehandle => "IO::Handle"
- filename => FILENAME
-
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.
- package => PACKAGE
-
The name-space which will be used: it will produce a
"package"line in the output.
Accessors
- $obj->
file() -
Returns the output file-handle, which you may use to add extensions to the module.
Producers
- $obj->
footer($fh)
- $obj->
freeze(PAIRS|HASH) -
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.
- $obj->
header($fh, $package) -
Prints the header text to the file.
Diagnostics
- Error: either filename or filehandle required
- Error: freeze can only be called once
-
The various closures may have related variables, and therefore need to be dumped in one go.
- Error: freeze needs PAIRS or a HASH
- Error: package name required
-
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.
- Error: value with $name is not a code reference
Releases
6 releases since Debian 8 (Jessie); the text changed 2 times.