#!/usr/bin/perl use strict; use warnings; package Zvire; use Moose; # atributy has 'jmeno' => (is => 'ro', required => 1); package Zvire::Kocka; use Moose; extends 'Zvire'; # nic navic oproti tride Zvire package Zvire::Pes; use Moose; extends 'Zvire'; has 'kocka' => ( is => 'rw', isa => 'Zvire::Kocka', clearer => 'clear_kocka' ); sub pronasleduj { my $self = shift; print $self->jmeno() , defined $self->kocka() ? ' pronasleduje kocku/kocoura jmenem ' . $self->kocka()->jmeno() : ' nepronasleduje nikoho' , ".\n"; } package main; my $tom = Zvire::Kocka->new(jmeno => 'Tom'); my $spike = Zvire::Pes->new(jmeno => 'Spike', kocka => $tom); $spike->pronasleduj(); $spike->clear_kocka(); $spike->pronasleduj();