http://qs321.pair.com?node_id=818972


in reply to No DESTROY object.

This would work as intended:

use strict; use warnings; package Foo; sub new { my $class = shift; return bless( eval 'sub { print "Hello!\n" }', $class ); } sub DESTROY { print "DESTROYing $_[0]\n"; return; } package main; my $object = Foo->new; print "Created $object\n"; $object->(); undef $object; print "Done.\n";
# Created Foo=CODE(0x82cafec) # Hello! # DESTROYing Foo=CODE(0x82cafec) # Done.

Or use closures:

sub new { my $class = shift; my $string = "Hello!\n"; return bless( sub { print $string }, $class ); }