NAME

Perl::Signature - Generate functional signatures for perl code

DESCRIPTION

A large part of the work in creating Perl::Compare was put into it's method for "normalizing" perl code as far as possible.

However, the main problem in working with these normalised files is that we need to do a relatively expensive deep compare of a very large data structure.

Perl::Signature attempts to resolve this problem by taking the normalized perl document, serialising it via a standard serialization mechanism, and then digesting it down to a single 128-bit signature.

This is a fairly expensive process, mainly because it involves a full PPI parse round, the normalization process, serialization, and digesting.

But, having done it for a file once, you can do a direct comparison to the functional signature of any other file, and if they match, then it's a pretty safe bet they are functionally the same.

Avoid Changes in the Calculation

Perl::Signature is relatively sensitive. Because any file goes through 4 stages, any of which could change in structure with an upgrade, you should ensure that all signatures are generated with the same versions of PPI, Perl::Compare and the same set of Perl::Compare plugins installed.

METHODS

Because most of the work is done elsewhere, all the methods are one-shot methods. They will all either return a 32 character hexidecimal MD5 hash, or undef.

file $filename

The file method does the whole deal. Load a file, parse it, normalize, serialize and digest. It actually happens in several parts. file just loads the file and passes it on to source.

Returns a 32 character hexidecimal MD5 signature.

source $content | \$content

The source takes perl source code as either a plain string or a reference to a SCALAR. Parses the content and hands the PPI::Document object off to Document.

Returns a 32 character hexidecimal MD5 signature.

Document

The Document method takes a PPI::Document object and does the final nomalize + serialize + digest steps.

Returns a 32 character hexidecimal MD5 signature.

TO DO

- Write unit tests

- Test test test

SUPPORT

All bugs should be filed via the CPAN bug tracker at

http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Perl%3A%3ASignature

For other issues, contact the author

AUTHORS

Adam Kennedy (Maintainer), http://ali.as/, cpan@ali.as

COPYRIGHT

Copyright (c) 2004 Adam Kennedy. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.