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.
...
}