package Chemistry::File::Dumper; $VERSION = '0.35'; require 5.006; use strict; use warnings; use base "Chemistry::File"; use Chemistry::Mol; # should I use it? use Data::Dumper; use Carp; =head1 NAME Chemistry::File::Dumper - Read and write molecules via Data::Dumper =head1 SYNOPSIS use Chemistry::File::Dumper; my $mol = Chemistry::Mol->read("mol.pl"); print $mol->print(format => dumper); $mol->write("mol.pl", format => "dumper"); =cut =head1 DESCRIPTION This module hooks the Data::Dumper Perl core module to the Chemistry::File API, allowing you to dump and undump Chemistry::Mol objects easily. This module automatically registers the "dumper" format with Chemistry::Mol. For purpuses of automatic file type guessing, this module assumes that dumped files end in C<.pl>. This module is useful mainly for debugging purposes, as it dumps I the information available in an object, in a reproducible way (so you can use it to compare molecule objects). However, it wouldn't be a good idea to use it to read untrusted files, because they may contain arbitrary Perl code. =cut Chemistry::Mol->register_format(dumper => __PACKAGE__); =head1 OPTIONS The following options can be used when writing a molecule either as a file or as a string. =over 4 =item dumper_indent Value to give to Data::Dumper::Indent. Default is 1. =item dumper_purity Value to give to Data::Dumper::Purity. Default is 1. =back There are no special options for reading. =cut sub write_mol { my ($self, $fh, $mol, %opts) = @_; my $d = Data::Dumper->new([$mol],['$mol']); # sort the keys if this version of Data::Dumper supports it $d->Sortkeys(1) if $d->can('Sortkeys'); print $fh $d ->Indent(exists $opts{dumper_indent} ? $opts{dumper_indent} : 1) ->Purity(exists $opts{dumper_purity} ? $opts{dumper_purity} : 1) ->Dump; } sub read_mol { my ($self, $fh, %opts) = @_; my $mol; my $s = do { local $/; <$fh> }; return unless $s; eval $s; if ($@) { croak "Dumper eval error: $@" if $opts{fatal}; return; } $mol->_weaken; $mol; } sub name_is { my ($self, $name, %opts) = @_; $name =~ /\.pl$/i; } sub string_is { my ($self, $s, %opts) = @_; $s =~ /^\$mol/; } 1; =head1 VERSION 0.35 =head1 SEE ALSO L, L, L =head1 AUTHOR Ivan Tubert-Brohman =head1 COPYRIGHT Copyright (c) 2005 Ivan Tubert-Brohman. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut