Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: Storing variable coordinates in a matrix

by jettero (Monsignor)
on Mar 16, 2007 at 19:29 UTC ( #605207=note: print w/replies, xml ) Need Help??

in reply to Storing variable coordinates in a matrix

What you really want is for each element of your matrix to be dynamically calculated — like a spreadsheet. You need to overload the way perl indexes the matrix. For that, you want Tie::Array, actually Tie::StdArray in particular. Then just alter the way the package works to suit your needs.

In this case, you want to store expressions at each index and evaluate them on the fly. I admit to thinking that wasn't possible in perl for a couple days, but tye straightened me out (ironically/punny) in the CB. I felt rather foolish about it actually.

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; }


Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://605207]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2022-01-19 21:00 GMT
Find Nodes?
    Voting Booth?
    In 2022, my preferred method to securely store passwords is:

    Results (56 votes). Check out past polls.