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 . . . } #### if ($g1->is_built($athing_name)) { #### if (Gadget->is_built($athing_name)) { #### sub is_built { my ($class, $name) = @_; # return if dealing with a reference... # note: not tested ;) return if (ref $class eq '__PACKAGE__'); . . . # do stuff if this sub is called ast a class # method. ... }