#! /usr/bin/env perl use strict; use warnings; package DB::Base { sub new { my ( $class, $name, $options ) = @_; my $self = {}; bless( $self, $class ); $self->{name} = $name; $self->{options} = $options || {}; return $self; } sub option { my ( $self, $key ) = @_; die('missing key') unless ($key); die( 'missing option `' . $key . '`' ) unless ( defined $self->{options}{$key} ); return $self->{options}{$key}; } }; package DB::Customer { use base "DB::Base"; sub new { my ( $class, @args ) = @_; return $class->SUPER::new( @args, { type => 'Customer', currency => 'Euro', ... } ); } }; package main; my $customer1 = DB::Customer->new('id_customer 1'); __END__;