package Animal; sub new { return bless {}, shift; } sub to_string { die "pure virtual\n"; } 1; package Animal::Dog; use base qw/Animal/; sub to_string { return "Hund"; } 1; package Animal::Cat; use base qw/Animal/; sub to_string { return "Katze"; } 1; package Animal::Mouse; use base qw/Animal/; sub to_string { return "Maus"; } 1; package Animal::Farm; sub new { return bless {}, shift; } sub add { my $self = shift; if(@_ > 1) { $self->add($_) foreach @_; } else { my $animal = shift; die "Is not an animal!" unless $animal->isa('Animal'); $self->{animals} ||= []; push @{ $self->{animals} }, $animal; } } sub to_string { my $self = shift; $self->{animals} ||= []; return join ' ', map { $_->to_string } @{ $self->{animals} }; } 1; # hier beginnt das script #!/usr/bin/perl use strict; my $farm = Animal::Farm->new; $farm->add(Animal::Dog->new); $farm->add(Animal::Cat->new, Animal::Mouse->new); my $template = HTML::Template::Compiled->new ( filename => $tmpl_file, path => $mein_pfad, use_query => 1 ); $template->param( farm => $farm );