PPI::Document::File - A Perl Document located in a specific file


PPI documentation Contained in the PPI distribution.

Index


Code Index:

NAME

Top

PPI::Document::File - A Perl Document located in a specific file

DESCRIPTION

Top

WARNING: This class is experimental, and may change without notice

PPI::Document::File provides a PPI::Document subclass that represents a Perl document stored in a specific named file.

METHODS

Top

new

  my $file = PPI::Document::File->new( 'Module.pm' );

The new 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 undef on error.

filename

The filename accessor returns the name of the file in which the document is stored.

save

  # Save to the file we were loaded from
  $file->save;

  # Save a copy to somewhere else
  $file->save( 'Module2.pm' );

The save method works similarly to the one in the parent PPI::Document class, saving a copy of the document to a file.

The difference with this subclass is that if save 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 copy and so the value returned by the filename accessor will stay the same, and not change to the new filename.

TO DO

Top

- May need to overload some methods to forcefully prevent Document objects becoming children of another Node.

SUPPORT

Top

See the support section in the main module.

AUTHOR

Top

Adam Kennedy <adamk@cpan.org>

COPYRIGHT

Top


PPI documentation Contained in the PPI distribution.
package PPI::Document::File;

use strict;
use Carp          ();
use Params::Util  qw{_STRING _INSTANCE};
use PPI::Document ();

use vars qw{$VERSION @ISA};
BEGIN {
	$VERSION = '1.215';
	@ISA     = 'PPI::Document';
}





#####################################################################
# Constructor and Accessors

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;
}

sub filename {
	$_[0]->{filename};
}

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;