package Series; use strict; sub TIEARRAY { my $pkg = shift; my $rsub = shift; # sub for formula my @vals = @_; bless { 'values' => [ @vals ], 'next' => $rsub }, $pkg; } sub FETCHSIZE { # rather meaningless in context, but gets called a lot # presume it's to check that any values at all exist return 1; # for now } sub FETCH { die "can't get subscripted value of series"; } sub SHIFT { my ($obj) = @_; my $ra = $obj->{'values'}; push(@$ra, $obj->{'next'}->(@$ra)); return shift @$ra; } 1;