I have two modules that use scalar objects:
package OnDestroy;
BEGIN {
our @EXPORT = qw( on_destroy );
require Exporter;
*import = \&Exporter::import;
}
sub on_destroy(&) {
my ($action) = @_;
return bless(\$action);
}
sub cancel {
my ($self) = @_;
undef $$self;
}
sub DESTROY {
my ($self) = @_;
my $action = $$self;
$action->() if $action;
}
1;
and something I wrote in reponse to a question on PerlMonks:
package AutoExecute;
BEGIN {
our @EXPORT = qw( auto_execute );
require Exporter;
*import = \&Exporter::import;
}
use overload
'""' => \&stringify,
'&{}' => \&code_ref,
;
sub auto_execute(&) {
my ($sub) = @_;
return bless(\$sub);
}
sub new {
my ($class, $sub) = @_;
return bless(\$sub, $class);
}
sub stringify {
my ($self) = @_;
my $sub = $$self;
return $sub->();
}
sub code_ref {
my ($self) = @_;
my $sub = $$self;
return $sub;
}
1;
All my other objects are based on arrays.