perlquestion xyzzy <p>Let's assume I have a matrix (any sort of <i>n</i>-dimensional array) <c>@m</c>. Better yet, let's pretend it's in an object, so to access it we have to do <c>\$o->{m}</c>. Now let's assume I have a dictionary (hash) that assigns names to certain elements in that matrix, which are represented by an anonymous array of coordinates:<c> %h = ( a => [3, 9, 4], b => [2, 1, 3], c => [9, 7, 2], ... ) </c>Is there any way to represent the element in the matrix using coordinates from the hash (let's also pretend that we're using a variable as the hash key) that is more elegant than <c>\$o->{m}[\$h{\$key}->][\$h{\$key}->][\$h{\$key}->]</c>? All those brackets are giving me a headache.</p> <p>The only alternative I could think of was:<c> my (\$x,\$y,\$z) = @{\$h{\$key}}; \$o->{m}[\$x][\$y][\$z] = ... </c>but making three new scalars to clarify a single operation (let's assume that there will only be a single lookup within this scope) seems a little excessive, and if you count the newline it uses the same exact amount of keystrokes. If this is something that I need to do in more than one place, then it would make sense to make something like:<c> 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); </c>or to be more flexible:<c> sub matrixGet { my (\$m, \$x, \$y, \$z) = @_; return \$m->[\$x][\$y][\$z]; } ... matrixGet(\$o->{m},@{\$h{\$key}}); </c>but now this looks so cumbersome. And what if I have matrices of different dimensions? Now I need <c>matrixGet2D</c> and <c>matrixGet3D</c> and <c>matrixGet4D</c>, etc. And all I really wanted to do was access a certain element using a set of coordinates stored somewhere else for a (relatively) tiny little script I'm writing to manage some data to assist me in a minigame within a game I'm playing. It's already growing to double or triple the size I thought it would originally. But I digress. Is there a simple inline method for using an arrayref as the indexes of a matrix?</p> <p>And if there's any other blatantly unnecessary step in my code please let me know. It's been a while since I used Perl and mucking about in references was never my strong suit.</p> <p>Thank you.</p> <!-- Node text goes above. Div tags should contain sig only --> <div class="pmsig"><div class="pmsig-741923"> <br /><c>\$,=qq.\n.;print q.\/\/____\/.,q./\ \ / / \\.,q. /_/__.,q..</c><br /> Happy, sober, smart: pick two.<br /> </div></div>