in reply to trees and depth-first search
produces:package Node; use strict; use warnings; sub new { my $self = bless( {}, shift ); my $name = shift; $self->name($name); return $self; } sub name { my $self = shift; @_ ? $self->{name} = shift : $self->{name}; } sub parent { my $self = shift; @_ ? $self->{parent} = shift : $self->{parent}; } sub ancestory { my $self = shift; my $decendants = shift || (); my $name = $self->name(); unshift @{$decendants}, $self->name(); my $parent = $self->parent(); $parent ? $parent->ancestory($decendants) : $decendants; } my %Nodes; sub GetNode { my $nodeName = shift; if ( ! $Nodes{$nodeName} ) { $Nodes{$nodeName} = new Node($nodeName); } return $Nodes{$nodeName}; } # # load relationships # while (<DATA>) { chomp; my ($parentName,$childName) = split ",",$_ ; my $parentNode = GetNode($parentName); my $childNode = GetNode($childName); $childNode->parent($parentNode) } # # print path to the node you are looking for # print join " ", @{GetNode("managedApplication")->ancestory()}; print "\n"; print join " ", @{GetNode("personnel")->ancestory()}; print "\n"; __DATA__ top,inetUser top,person top,application person,organizationalPerson application,managedApplication organizationalPerson,managedPerson managedPerson,personnel
top application managedApplication top person organizationalPerson managedPerson personnel
|
|---|