XP is just a number | |
PerlMonks |
Accessing a matrix value from a dictionary of named coordinate tuplesby xyzzy (Pilgrim) |
on Mar 11, 2014 at 21:36 UTC ( [id://1077910]=perlquestion: print w/replies, xml ) | Need Help?? |
xyzzy has asked for the wisdom of the Perl Monks concerning the following question: Let's assume I have a matrix (any sort of n-dimensional array) @m. Better yet, let's pretend it's in an object, so to access it we have to do $o->{m}. 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: 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 $o->{m}[$h{$key}->[0]][$h{$key}->[1]][$h{$key}->[2]]? All those brackets are giving me a headache. The only alternative I could think of was: 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: or to be more flexible: but now this looks so cumbersome. And what if I have matrices of different dimensions? Now I need matrixGet2D and matrixGet3D and matrixGet4D, 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? 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. Thank you. $,=qq.\n.;print q.\/\/____\/.,q./\ \ / / \\.,q. /_/__.,q.. Happy, sober, smart: pick two.
Back to
Seekers of Perl Wisdom
|
|