The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use Data::Dumper;
use SVG::Graph;
use SVG::Graph::Data;
use SVG::Graph::Data::Tree;

my %fill = (
    1 => 'red',
    2 => 'orange',
    3 => 'yellow',
    4 => 'green',
    5 => 'blue',
    6 => 'indigo',
    7 => 'violet',
);

my $graph = SVG::Graph->new( width => 600, height => 600, margin => 30 );

my $group0 = $graph->add_frame;

my $tree = SVG::Graph::Data::Tree->new;

$group0->add_data($tree);

my $root = $tree->root;
$root->branch_length( int( rand(10) + 1 ) );

my @nodes = ();
for my $c ( 0 .. 20 ) {
    my $node = $tree->new_node(
        branch_length  => int( rand(10) + 2 ),
        stroke         => $fill{ int( rand(7) + 1 ) },
        'stroke-width' => int( rand(5) + 1 )
    );

    if ( $c < 2 ) {
        $root->add_daughter($node);
    }
    else {
        my $rand_parent = $nodes[ int( rand($#nodes) ) ];
        $rand_parent->add_daughter($node);
    }

    push @nodes, $node;
}

$group0->add_glyph( 'tree', stroke => 'black', 'stroke-width' => 2 );
print $graph->draw;