%h = ( a => [3, 9, 4], b => [2, 1, 3], c => [9, 7, 2], ... ) #### my ($x,$y,$z) = @{$h{$key}}; $o->{m}[$x][$y][$z] = ... #### sub matrixGet { my ($o, $x, $y, $z) = @_; return $o->{m}[$x][$y][$z]; } sub matrixSet { my ($o, $x, $y, $z, $val) = @_; $o->{m}[$x][$y][$z] = $val; } ... $o->matrixGet(@{$h{$key}}); $o->matrixSet(@{$h{$key}},5); #### sub matrixGet { my ($m, $x, $y, $z) = @_; return $m->[$x][$y][$z]; } ... matrixGet($o->{m},@{$h{$key}});