#!/usr/bin/perl
# your code goes here

package MONOLOG;

use strict;

sub new {
  my ( $class, $name ) = @_;
 
  my $self = bless { name => $name }, $class;
 
  $self->process();
 
  return $self;
}

sub name {
	return $_[0]->{'name'};
}

sub process {
	die "abstract";
}

package MONOLOG::Simple;

use strict;
use parent -norequire, 'MONOLOG';

sub process {
	my ( $self ) = @_;
	
	my $name = $self->name();
	
	printf "Welcome, %s!!!\n", $name;
	
	return $self;
}


package main;

use strict;

eval {
	my $abstract = MONOLOG->new('whatever');
};

print "As expected: $@" if ($@);

my $alex = MONOLOG::Simple->new('Alex');
my $mike = MONOLOG::Simple->new('Mike');
