Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Storing variable coordinates in a matrix

by jettero (Monsignor)
on Mar 16, 2007 at 19:29 UTC ( [id://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; }

-Paul

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2024-04-20 00:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found