The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Router::Boom::Node;
use strict;
use warnings;
use utf8;
use 5.008_001;

use Class::Accessor::Lite 0.05 (
    rw => [qw(leaf)],
    ro => [qw(key children)],
);

sub new {
    my $class = shift;
    my %args = @_==1 ? %{$_[0]} : @_;
    bless {
        children => +[],
        %args,
    }, $class;
}

use re 'eval';

sub add_node {
    my ($self, $child) = @_;
    for (my $i=0; $i<@{$self->{children}}; $i++) {
        if ($self->{children}->[$i]->{key} eq $child) {
            return $self->{children}->[$i];
        }
    }
    push @{$self->{children}}, Router::Boom::Node->new(key => $child);
    return $self->{children}->[-1];
}

=pod

sub as_arrayref {
    my ($self) = @_;
    [$self->key, [map { $_->as_arrayref } @{$self->children}], $self->leaf];
}

=cut

1;