in reply to Re^3: Elaborate Records, arrays and references
in thread Elaborate Records, arrays and references

You are having a problem because you are defining the function  test as a prototyped function and then invoking it in a way that disables prototype behavior.

Had the function declared and defined with the  (\%) prototype
    sub test (\%);
    ...
    sub test (\%) { ... }
been invoked as
    test(%Record1);
a hash reference would have been passed to the function. Invocation as
    &test(%Record1);
(note the  & sigil in front of  test) causes the  %Record1 hash to be 'flattened' (the prototyped behavior of taking a reference to an explicit hash is ignored) and the first parameter in the argument list happens, in the example given, to be the string 'password', which doesn't work as a hash reference. If an explicit hash reference is passed, e.g.
    &test($hashref);
everything works again, but then
    test($hashref);
(note no  & sigil) doesn't work!

The take-away lesson: Don't use prototypes unless you really understand what they do and really need that to be done.

Update: See Prototypes in perlsub (and, for good measure, Far More than Everything You've Ever Wanted to Know about Prototypes in Perl -- by Tom Christiansen).

Update: Added code example:

>perl -wMstrict -le "sub test (\%); ;; my %Record1 = ( username => '$' , password => '$' , emailAddress => '@' ); my $hashref = \%Record1; ;; print $Record1{username}; $hashref->{username} = 'NOOoooooo!'; print $Record1{username}; test(%Record1); print $Record1{username}; ;; sub test (\%) { my $reference = shift; my $test = q{Pigsy's Perfect Ten}; $reference->{username} = $test; print 'in test(): ', $reference->{username}; } " $ NOOoooooo! in test(): Pigsy's Perfect Ten Pigsy's Perfect Ten