#!/usr/bin/perl use strict; use warnings; sub DESTROY { print "DESTROY called!\n"; } sub make_accessor { my $self = shift; my ($name, $index) = (bless ([] => 'main'), 1); no strict 'refs'; *{ref($self) . "::$name"} = sub { my $self = shift; return $self->[$index] unless @_; $self->[$index] = $_[0]; $self; }; 1; } my $foo = make_accessor; print "End of program\n"; __END__ DESTROY called! End of program