package MyPackage; use strict; use IMAP::Client; use Config::Simple; use Carp; sub new { my $class = shift; return bless {}, ref($class) || $class; } sub load_config { my $self = shift; $self->{'config'} = Config::Simple->new(@_); return $self->{'config'}; } sub connect_to_imaphost { my $self = shift; my $config = $self->{'config'} or croak "ERROR : Connect to imaphost without loading config"; $self->{'imap'} = Mail::IMAPClient->new( Server => $config->{'IMAP_HOST'}, User => $config->{'EM_UNAME'}, .... ); return $self->{'imap'}; } # accessor functions sub imap { return shift->{'imap'}; } sub config { return shift->{'config'}; } #### use MyPackage; my $pkg = MyPackage->new(); $pkg->load_config('my.conf'); $pkg->connect_to_imaphost(); #### my $msg_count = $pkg->imap()->message_count( ... );