package Gadget; # # 'build' new gadget... # return undef on fail. # sub new { my ($proto, $name, %args) = @_; my $self = bless {}, $proto; $self->{name} = $name; . . . work with %args . . . return $self; } # # check if a gadget has already been built. # sub is_built { my ($self, $name) = @_; return exists %_built_gadgets{$name}; } 1; package main; my $g1 = new Gadget('knob'); . . . create a bunch of other gadgets . . . if ($g1->is_built($athing_name)) { print "Gadget '$athing_name' has already been built!!\n"; } else { . . . do something useful here . . . }