Bryan,
    There are other instances than the example below but this one tripped me
recently.
my %exhash = ( one => 1,
               two => 2,
               thr => 3 );
my $href = \%exhash;
my @exary = qw ( zero one two thr four);
print $$href{$exary[$$href{two}]}, "\n";
# $$href{two} is 2
# used as a subscript for the array is two
# used as a hash key yields 2 - no big deal
# but
%exhash = ( one => 1,
            two => \@exary,
            thr => 3 );
# now consider the below
print  $ { $$href{two}}[3], "\n";
print  $ $$href{two}[3], "\n";     # <------------
                                                                        |
the final print statement yields:                           |
Not a SCALAR reference at ./list_h.pl line 18.-
This is a contrived example but recently I was 'gaming' and using hash refs
whose target hashes
had array references in some of the values, and it had me stumped until I
remembered braces can be used to
disambiguate references.
print $href->{two}->[3];
Is another way to do the same job.
Clear as mud?

"Bryan R Harris" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
>
> Quick question:
>
> When exactly are {} braces required?  I notice when following references,
> $ { $var } and $$var both work identically.  Do you ever actually need
> them?
>
> - B
>



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to