in reply to variables not posting?
I'm sure we've all done this same silly mistake. At least I've done my share. ;-)
That means that as soon as you leave the scope of foreach { } the hash %fields is inaccessible. Hence the fix that was given above handles your problem.
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; }
That means that as soon as you leave the scope of foreach { } the hash %fields is inaccessible. Hence the fix that was given above handles your problem.
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 Section
Seekers of Perl Wisdom