#!/usr/bin/perl -w use strict; package TieLazy; use Tie::Hash; @TieLazy::ISA = qw( Tie::StdHash ); sub new { my $class = shift; my %data; tie %data, "TieLazy", @_; bless \%data, $class; } sub TIEHASH { my $self = shift; my %data = %{ +shift }; bless \%data, $self; } sub FETCH { my $self = shift; my $item = shift; if (defined(my $data = ($self->{$item}))) { if (ref($data) eq 'CODE') { return $self->{$item} = $data->(); } else { return $self->{$item}; } } }