SPUG:Reference question
Damian Conway
damian at conway.org
Sun Mar 9 16:52:56 CST 2003
Thane Williams wrote:
> Ok, maybe someone can point out the obvious to me here. Here's my code:
>
> #!/usr/bin/perl
> my %record
> $record{Wilma}{age} = 32;
> $record{Fred}{age} = 38;
> $record{Wilma}{sex} = "female";
> $record{Fred}{sex} = "male";
>
> foreach my $key (keys %record) {
> my $age = $record{$key}{age};
> my $sex = $record{$key}{sex};
Lexical scalars used.
>
> foreach ("age", "sex") {
> print "$_ for $key is ${$_}\n";
> }
> }
>
> The foreach loop prints this:
> age for Fred is
> sex for Fred is
> age for Wilma is
> sex for Wilma is
>
> If $_ equals "age", I'd expect ${$_} to equal $age.. which it apparently
> doesn't. (I get the same results even if I put "my $age = 50;").
>
> I tried this test code:
>
> #!/usr/bin/perl
> $name = "Fred";
> $age = "55";
> $sex = "male";
Package scalars used.
> foreach ("age", "sex") {
> print "$_ for $name is ${$_}\n";
> }
> And it works! What's the difference?
${$_} is ${"name"} or ${"age"}.
These are symbolic dereferences.
Symbolic dereferences always end up at a package variable, never a lexical.
HTH,
Damian
More information about the spug-list
mailing list