Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Dynamic Hash value

by Corion (Patriarch)
on Apr 21, 2010 at 07:44 UTC ( #835980=note: print w/replies, xml ) Need Help??


in reply to Dynamic Hash value

You need to delay the evaluation. Perl calculates each expression as it runs it, so later changes will not change the values already computed:

#!perl -w use strict; my $ini=4; my $last=2; my %result=( SAS1=>$ini-$last, # 2 SAS2=>$last-$ini, # -2 SAS3=>$ini-$last # 2 );

If you want to keep changing $ini and $last, you can do that in a subroutine:

#!perl -w use strict; use Data::Dumper; sub get_SAS { my ($ini,$last) = @_; my %result=( SAS1=>$ini-$last, # 2 SAS2=>$last-$ini, # -2 SAS3=>$ini-$last # 2 ); return %result }; my %res42 = get_SAS(4,2); print Dumper \%res42; my %res105 = get_SAS(10,5); print Dumper \%res105; __END__ $VAR1 = { 'SAS3' => 2, 'SAS2' => -2, 'SAS1' => 2 }; $VAR1 = { 'SAS3' => 5, 'SAS2' => -5, 'SAS1' => 5 };

There are also other ways to delay the calculation, but I think this is the easiest approach.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (2)
As of 2023-09-28 18:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?