package PPI::Document::File; =pod =head1 NAME PPI::Document::File - A Perl Document located in a specific file =head1 DESCRIPTION B B provides a L subclass that represents a Perl document stored in a specific named file. =head1 METHODS =cut use strict; use Carp (); use Params::Util qw{_STRING _INSTANCE}; use PPI::Document (); use vars qw{$VERSION @ISA}; BEGIN { $VERSION = '1.236'; @ISA = 'PPI::Document'; } ##################################################################### # Constructor and Accessors =pod =head2 new my $file = PPI::Document::File->new( 'Module.pm' ); The C constructor works the same as for the regular one, except that the only params allowed is a file name. You cannot create an "anonymous" PPI::Document::File object, not can you create an empty one. Returns a new PPI::Document::File object, or C on error. =cut sub new { my $class = shift; my $filename = _STRING(shift); unless ( defined $filename ) { # Perl::Critic got a complaint about not handling a file # named "0". return $class->_error("Did not provide a file name to load"); } # Load the Document my $self = $class->SUPER::new( $filename, @_ ) or return undef; # Unlike a normal inheritance situation, due to our need to stay # compatible with caching magic, this actually returns a regular # anonymous document. We need to rebless if if ( _INSTANCE($self, 'PPI::Document') ) { bless $self, 'PPI::Document::File'; } else { die "PPI::Document::File SUPER call returned an object of the wrong type"; } # Save the filename $self->{filename} = $filename; $self; } =head2 filename The C accessor returns the name of the file in which the document is stored. =cut sub filename { $_[0]->{filename}; } =pod =head2 save # Save to the file we were loaded from $file->save; # Save a copy to somewhere else $file->save( 'Module2.pm' ); The C method works similarly to the one in the parent L class, saving a copy of the document to a file. The difference with this subclass is that if C is not passed any filename, it will save it back to the file it was loaded from. Note: When saving to a different file, it is considered to be saving a B and so the value returned by the C accessor will stay the same, and not change to the new filename. =cut sub save { my $self = shift; # Save to where? my $filename = shift; unless ( defined $filename ) { $filename = $self->filename; } # Hand off to main save method $self->SUPER::save( $filename, @_ ); } 1; =pod =head1 TO DO - May need to overload some methods to forcefully prevent Document objects becoming children of another Node. =head1 SUPPORT See the L in the main module. =head1 AUTHOR Adam Kennedy Eadamk@cpan.orgE =head1 COPYRIGHT Copyright 2001 - 2011 Adam Kennedy. 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. =cut