#!/usr/bin/perl use strict; use warnings; package AutoVivify; use vars qw/$AUTOLOAD/; sub new($$) { my ($class, $initializer) = @_; die "Initializer must be a code reference." unless (ref($initializer) eq 'CODE'); my $self = {initializer => $initializer}; bless($self, $class); return $self; } sub AUTOLOAD { $_[0] = &{$_[0]->{initializer}}(); $AUTOLOAD =~ s/.*:://; eval "\$_[0]->$AUTOLOAD(\@_)"; } sub DESTROY { } 1;