use warnings; use strict; my @matrix; tie @matrix, 'my_spreadsheet_matrix', ( [ '$x', '$y' ], [ '$x+1', '$y+1' ], [ '$x+7', '$y+7' ], ); my ($x, $y) = (7, 9); print "$matrix[1][1]\n"; ($x, $y) = (13, 27); print "$matrix[1][1]\n"; exit 0; package my_spreadsheet_matrix; use warnings; use strict; use Tie::Array; use base 'Tie::StdArray'; 1; sub FETCH { my $this = shift; my $that = $this->SUPER::FETCH(@_); return $that if ref $that; $that = eval $that; die $@ if $@; return $that; } sub TIEARRAY { my $class = shift; my $this = bless [], $class; for my $e (@_) { if( ref $e ) { tie @$e, $class, @$e; } push @$this, $e; } return $this; }