Dirk80:
It appears (from my casual reading) that each tie would create a new copy of the table, so extensive use may cost more time and memory than needed. So you might want to have a function in My::DualVar that creates the table, and then you can tie the table to variables as necessary. I haven't played
with tying variables (much or recently), so I'm sure my syntax is (likely to be) wrong, but what I'm thinking is something that would give you usage something like:
my %directions = ( 1=>'NORTH', 2=>'SOUTH', 3=>'EAST', 4=>'WEST' );
my $table_fwd = My::DualVar->new(%directions);
my $table_rev = My::DualVar->new(reverse %directions);
tie $direction, \$table_fwd;
my ($dir, $dir2) = (4, 1);
tie $dir, \$table_fwd;
tie $dir2, \$table_fwd;
print_dualvar($dir);
++$dir2;
print_dualvar($dir2);
tie $dir2, \$table_rev;
for $dir2 (qw(SOUTH WEST EAST)) {
$dir = $dir2 + 0;
print_dualvar($dir);
}
I've thought a little about using the dual nature of variables in some perl code, but haven't actually taken the plunge. (What I was thinking was along the lines of parsing a file, and keeping the original representation of a number in the string section so that if calculations are unexpected, I can see what string led to the fault. As a terrible example, suppose I was reading the number part of a street address into a variable (using a stupid technique):
use strict;
no warnings; # !!!
my @addresses = (
"1141 Tennessee Avenue",
"12E10th Street"
);
for (@addresses) {
my $house_number = $_+0;
print "House# across the street is ", $house_number+1, "\n";
print "DEBUG: Original house number '$house_number'\n\n";
}
Which prints:
$ perl t.pl
House# across the street is 1142
DEBUG: Original house number '1141'
House# across the street is 120000000001
DEBUG: Original house number '120000000000'
Where I would want to see:
House# across the street is 1142
DEBUG: Original house number '1141 Tennessee Avenue'
House# across the street is 120000000001
DEBUG: Original house number '12E10th Street'
...roboticus
When your only tool is a hammer, all problems look like your thumb.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.