Algorithm-Dependency
view release on metacpan or search on metacpan
lib/Algorithm/Dependency/Source/File.pm view on Meta::CPAN
#pod Anything that is not a word character will be assumed to be a separator.
#pod
#pod The first word will be used as the name or id of the item, and any further
#pod words in the line will be used as other items that this one depends on. For
#pod example, all of the following are legal.
#pod
#pod # A single item with no dependencies
#pod Foo
#pod
#pod # Another item that depends on the first one
#pod Bar Foo
#pod
#pod # Depending on multiple others
#pod Bin Foo Bar
#pod
#pod # We can use different separators
#pod One:Two|Three-Four+Five=Six Seven
#pod
#pod # We can also use multiple non-word characters as separators
#pod This&*&^*&File: is& & & :::REALLY()Neat
#pod
#pod From the examples above, it should be easy to create your own files.
#pod
#pod =head1 METHODS
#pod
#pod This documents the methods differing from the ordinary
#pod L<Algorithm::Dependency::Source> methods.
#pod
#pod =cut
use 5.005;
use strict;
use Algorithm::Dependency::Source ();
our $VERSION = '1.112';
our @ISA = 'Algorithm::Dependency::Source';
#####################################################################
# Constructor
#pod =pod
#pod
#pod =head2 new $filename
#pod
#pod When constructing a new Algorithm::Dependency::Source::File object, an
#pod argument should be provided of the name of the file to use. The constructor
#pod will check that the file exists, and is readable, returning C<undef>
#pod otherwise.
#pod
#pod =cut
sub new {
my $class = shift;
my $filename = shift or return undef;
return undef unless -r $filename;
# Get the basic source object
my $self = $class->SUPER::new() or return undef;
# Add our arguments
$self->{filename} = $filename;
$self;
}
#####################################################################
# Private Methods
sub _load_item_list {
my $self = shift;
# Load the contents of the file
local $/ = undef;
open( FILE, $self->{filename} ) or return undef;
defined(my $source = <FILE>) or return undef;
close( FILE ) or return undef;
# Split, trim, clean and remove comments
my @content = grep { ! /^\s*(?:\#|$)/ }
split /\s*[\015\012][\s\015\012]*/, $source;
# Parse and build the item list
my @Items = ();
foreach my $line ( @content ) {
# Split the line by non-word characters
my @sections = grep { length $_ } split /\W+/, $line;
return undef unless scalar @sections;
# Create the new item
my $Item = Algorithm::Dependency::Item->new( @sections ) or return undef;
push @Items, $Item;
}
\@Items;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Algorithm::Dependency::Source::File - File source for dependency hierarchies
=head1 VERSION
version 1.112
=head1 DESCRIPTION
( run in 0.582 second using v1.01-cache-2.11-cpan-39bf76dae61 )