Tree::Builder - Takes path like strings and builds a tree of hashes of hashes.


Tree-Builder documentation Contained in the Tree-Builder distribution.

Index


Code Index:

NAME

Top

Tree::Builder - Takes path like strings and builds a tree of hashes of hashes.

VERSION

Top

Version 0.0.0

SYNOPSIS

Top

    use Tree::Builder;

    my $tb = Tree::Builder->new();

    $tb->add('a/b/c');
    $tb->add('some/thing');
    $tb->add('a/some/thing');

    my %tree=$add

    print $tb->getSeperator;

    $tb->setSeperator('.');

    $tb->add('what.ever');

    #prints it using Data::Dumper
    use Data::Dumper;
    print Dumper(\%tree);




METHODS

Top

new

This initializes the object.

args hash

seperator

This is the seperator to use for breaking a string down and hadding it to the tree.

add

This adds a new item to the tree.

In regards to error checking, there is no need to check this for errors as long as you make sure that the string passed to it is defined.

    $tb->add("some/thing");
    if($tb->{error}){
        print "Error!\n";
    }

addSub

This is a internal function.

getSeperator

This gets the current seperator being used.

Error checking does not need to be done on this.

    my $seperator=$tb->getSeperator;

getTree

This fetches the tree.

    my %hash=$tb->getTree;

setSeperator

As long as this is defined, there is no need to check if it errored or not.

    $tb->setSeperator('/');
    if($tb->{error}){
        print "Error!\n";
    }

errorblank

This is a internal function.

ERROR CODES

Top

1

No seperator specified.

2

Item not defined.

AUTHOR

Top

Zane C. Bowers, <vvelox at vvelox.net>

BUGS

Top

Please report any bugs or feature requests to bug-tree-builder at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Tree-Builder. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Tree::Builder




You can also look for information at:

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Tree-Builder

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Tree-Builder

* CPAN Ratings

http://cpanratings.perl.org/d/Tree-Builder

* Search CPAN

http://search.cpan.org/dist/Tree-Builder/

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


Tree-Builder documentation Contained in the Tree-Builder distribution.
package Tree::Builder;

use warnings;
use strict;

our $VERSION = '0.0.0';


sub new {
	my %args;
	if(defined($_[1])){
		%args= %{$_[1]};
	}

	if (defined($args{seperator})) {
	}

	my $self={error=>undef, errorString=>undef, tree=>{}};
	bless $self;

	if (!defined($args{seperator})) {
		$self->{seperator}='/';
	}else {
		$self->{seperator}=$args{seperator};
	}

	return $self

}

sub add{
	my $self=$_[0];
	my $item=$_[1];

	$self->errorblank;

	if (!defined($item)) {
		my $error="Item is not defined";
		$self->{error}=2;
		$self->{errorString}=$error;
		warn('Tree-Builer add:2: '.$error);
		return undef;
	}

	my @itemA=split(/$self->{seperator}/, $item);

	#this initializes the first part of the tree
	if (!defined($self->{tree}{$itemA[0]})) {
		$self->{tree}{$itemA[0]}={};
	}

	#if item does not exist, return
	if (!defined($itemA[1])) {
		return 1;
	}

	my %newhash=%{$self->{tree}{$itemA[0]}};

	my %newhash2=$self->addSub(\%newhash, \@itemA, 1);

	$self->{tree}{$itemA[0]}=\%newhash2;

	return 1;
}

sub addSub{
	my $self=$_[0];
	my %hash=%{$_[1]};
	my @itemA=@{$_[2]};
	my $int=$_[3];

	#return the hash if none others are defined
	if (!defined($itemA[$int])) {
		return %hash;
	}

	#add a new hash if it does not already exist
	if (!defined($hash{$itemA[$int]})) {
		$hash{$itemA[$int]}={};
	}

	my %newhash=%{$hash{$itemA[$int]}};
	my $newint=$int + 1;

	my %newhash2=$self->addSub(\%newhash, \@itemA, $newint);

	$hash{$itemA[$int]}=\%newhash2;

	return %hash;
}

sub getSeperator{
	return $_[0]->{seperator};
}

sub getTree{
	return %{$_[0]->{tree}};
}

sub setSeperator{
	my $self=$_[0];
	my $seperator=$_[1];

	$self->errorblank;

	if (!defined($seperator)) {
		my $error='No seperator specified';
		$self->{error}=1;
		$self->{errorString}=$error;
		warn('Tree-Builder setSeperator:1: '.$error);
		return undef;
	}

	$self->{seperator}=$seperator;

	return 1;
}

sub errorblank{
	$_[0]->{error}=undef;
	$_[1]->{errorString}='';
}

1; # End of Tree::Builder