Facade

use strict;
use warnings;

{
    package Database;
    use strict;
    use warnings;
    sub new {die;}
    sub select_username_from_db_where_mailaddr_equal {
        my ($class, $mailaddr) = @_;
        if($mailaddr eq 'admin@hoge.com'){
            return "Watasi wa kanrinin";
        } else {
            die ("ERROR");
        }
    }
}

{
    package HtmlWriter;
    use strict;
    use warnings;
    sub new {
        my ($class, ) = @_;
        my $self = {
            buffer => '',
        };
        return bless $self, $class
    }
    sub title {
        my ($self, $title) = @_;
        $self->{buffer} .= "<html>\n"."<head>\n<title>".$title."</title>\n</head>\n";
        $self->{buffer} .= "<body>\n"."<h3>".$title."</h3>\n";
    }
    sub paragraph {
        my ($self, $msg) = @_;
        $self->{buffer} .= "<p>".$msg."</p>\n";
    }
    sub link {
        my ($self, $href, $caption) = @_;
        $self->paragraph("<a href='".$href."'>".$caption."</a>");
    }
    sub fin {
        my ($self, ) = @_;
        $self->{buffer} .= "</body>\n</html>\n";
    }
}

{
    package PageMaker;
    use strict;
    use warnings;

    sub new {die;}
    sub makeWelcomePage {
        my ($class, $mailaddr, $filename) = @_;
        my $username =
            Database->select_username_from_db_where_mailaddr_equal($mailaddr);
        my $writer = HtmlWriter->new();
        $writer->title('Welcome to '.$username.'\'s page!!');
        $writer->paragraph('wainging for your mail!!');
        $writer->link($mailaddr, 'My Mail Addr');
        $writer->fin();
        print $writer->{buffer};
    }
}

PageMaker->makeWelcomePage('admin@hoge.com', 'welcome.html');