package foo; use strict; sub new { print "foo::new\n"; my $self = bless( {}, shift ); $self->init(@_); return $self; } sub init { print "foo::init\n"; my $self = shift; my %args = ( foo=>undef, @_ ); $args{foo} = "foo" if ! defined $args{foo}; $self->foo($args{foo}); } sub foo { my $self = shift; $self->{_foo} = shift if @_; return $self->{_foo}; } 1;