in reply to How to update package scoped variables across files?
I have another perl script that access $id and updates it... [...] Now I have another script that runs after the previous script (file1.pl). The problem is when I access %id in this script (file2.pl), I want the updated %id values (Jim, 16), but I'm getting the original values ("sally", 23). How would I share package values across files and have updates reflected during each access?
From what I understand you want to set the variables via file1.pl:
and then later on call file2.pl and get the previously set value:# this is file1.pl use id; $id{Name} = "Jim";
# this is file2.pl use id; print $id{Name};
...and expect id.pm to magically store the value 'Jim' and his age?
This will not work. What you need to do is to write 'Jim' to disk and later on read that value from disk.
LanX' answer is misleading because it will not help you solve your problem. (The advice itself is correct, it just fails to solve your problem.)
hippo's answer points to one possible solution but may be a bit hard to understand. (What he suggests is to replace a simple 'memory-backed' hash with something that still looks like a hash, but is actually stored in the filesystem, this is achieved by 'tie'-ing a hash to a file.) Another option would be to manually write the data to the filesystem. This either requires 'file1.pl' and 'file2.pl' not to run at the same time or to make them aware of changes in the underlying file and handle them properly.
|
---|