#!/usr/bin/perl use strict; use warnings; package Zvire; { use Object::InsideOut; # atributy my @jmeno :Field :Get(get_jmeno) :Arg(Name => 'jmeno', Mandatory => 1); } package Zvire::Kocka; { use Object::InsideOut qw/Zvire/; } # nic navic oproti tride Zvire package Zvire::Pes; { use Object::InsideOut qw/Zvire/; sub _check_kocka { my $kocka = shift; # parametr musi byt undef a nebo objekt tridy Zvire::Kocka return 1 if not defined $kocka; return $kocka->isa('Zvire::Kocka'); } my @kocka :Field :Arg(kocka) :Type(\&Zvire::Pes::_check_kocka) :Std(kocka); sub pronasleduj { my $self = shift; print $self->get_jmeno() , defined $self->get_kocka() ? ' pronasleduje kocku/kocoura jmenem ' . $self->get_kocka()->get_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->set_kocka(undef); $spike->pronasleduj();