#!/usr/bin/perl use warnings; use strict; package Model { sub new { my $classname = shift; my $self = { controller => shift}; return bless($self, $classname); } sub calculateThreePlusFour { my $self = shift; return 3 + 4; } } package View { sub new { my $classname = shift; my $self = { controller => shift}; return bless($self, $classname); } sub showResult { my $self = shift; my $result = shift; print "$result\n"; } } package Controller { sub new { my $classname = shift; my $self = {}; $self->{model} = Model->new($self); $self->{view} = View->new($self); return bless($self, $classname); } sub run { my $self = shift; my $result = $self->{model}->calculateThreePlusFour(); $self->{view}->showResult($result); } } my $controller = Controller->new(); $controller->run();