When you declare
%fields inside the scope of the
foreach $item (@pairs) loop with
my, its
contents are private to that loop. Then you try to access
%fields after the loop, but it doesn't contain
anything since you're outside the closing bracket (scope)
of the
for loop.
-w and use strict tell of such errors.