The problem with the demo code is that each subroutine is only compiled once. That means that the $x variable in two corresponds to the $x variable in the first call of one. The first instance of $x persists as there is a reference to it stored in two.
Solutions include explicitly passing the value, forcing recompile each time through using a code reference (sub), swapping $x to a constant... What is the reason you aren't just passing in the value of $lig?
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.
| [reply] [d/l] [select] |
OK, I understand. Yes, in this simple case, it will be the solution. But it is very complicated if you must pass all the variable without the possiblity to have common data. It becomes more complicated than a good old C program... I you add the mass of problems linked to UTF8, I ask me if PERL is still a good solution.... Shhht!
| [reply] |
my $lig;
...
$lig=4;
print STDERR "ligA <<$lig>>\n";
my $xxxx = sub
{
...
print STDERR "ligX <<$lig>>\n";
};
print STDERR "ligB <<$lig>>\n";
$xxxx->();
The code ref has identical scope to the lexical variable, so know you don't have the potential for cross-thread contamination.
And I would very strongly disagree with the idea that Perl's handling of UTF-8 is problematic in comparison to any other language offering out there.
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.
| [reply] [d/l] |