Your code:
Here you've used my inside the scope of the foreach.foreach $item(@pairs) { my($key,$content) =split (/=/, $item, 2); $content=~tr/+/ /; $content=~s/%(..)/pack("c",hex($1))/ge; my($fields{$key})=$content; }
This properly declares the %hash making it available in the foreach since that is inside the variables scope. And makes it available after the foreach since that's still in scope.my (%hash); foreach $item(@pairs) { my($key,$content) =split (/=/, $item, 2); $content=~tr/+/ /; $content=~s/%(..)/pack("c",hex($1))/ge; $fields{$key}=$content; }
If you want to make a silly mistake that I've done on occasion try:
Here you have one variable called 'hash' outside the foreach and a different one 'hash' inside the foreach.<code> my (%hash); foreach $item(@pairs) { my($key,$content) =split (/=/, $item, 2); $content=~tr/+/ /; $content=~s/%(..)/pack("c",hex($1))/ge; my($fields{$key})=$content; }
Fortunately if you are using use strict; and -w for warnings this error will be pointed out by the error checking. Probably with a 'fields' used only once possible typo type warning. Yet another good reason to use -w warnings.
Hope this helps you understand a little of why the fix was a fix.
Claude
In reply to Re: variables not posting?
by Xxaxx
in thread variables not posting?
by stuffy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |