This problem is very difficult to describe, I will try to give as many details as possible in the hope someone out there understands what is going on.
A large Perl application contains a hash which contains an array. The application forks of two child processes using this array:
foreach (@{ $HASH{"IP"} }) {
# Please note $_ is used here
# IP contains two IP addresses
... forking goes here ...
}
After the fork, the child process creates several objects, one of which gets gets a reference to this hash. This process then calls an object function which alters the $_ variable. The reference to the hash is never changed nor used.
After this function call, the IP array in the hash has mysteriously changed in the child process! The Xth element (either 0 or 1) of the corresponding child process has the exact same value as $_, which was set in another object.
If I change the foreach to:
foreach my $notUsed (@{ $HASH{"IP"} }) {
# Please note $_ is NOT used here
# IP contains two IP addresses
... forking goes here ...
}
the IP array in the hash is not altered anymore.
So it appears the $_ variable has something to do with it, but I do not see where this goes wrong. Especially because the IP array is not altered anywhere in the application and the $_ is changed in another package. I suspect it's a problem with the forking, the reference to the hash and the $_ variable.
Does anyone have a clue?
Regards, Marcel
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.