Hamish Whittal wrote:
> Hi All,
>
> I'm still a little confused...
> What is the difference between
> %{$config_file->{$key}}
Here, $config_file is a hash reference. If you print it it will
display something like
HASH(0x12345678)
The hash it refers to is accessed by the value in $key, so if
you had
my $config_file = { K => { K2 => 'V2' } };
my $key = 'K';
then
$config_file->{$key}
would be equal to the anonymous hash { K2 => 'V2' }.
This value is then dereferenced again as a hash, so if
we have
my %hash = %{$config_file->{$key}};
then
$config_file->{$key}
%hash would be set to
%hash = ( K2 => V2 );
> %$config_file->{$key}
Now this is something altogether different. You've
discovered that you can use hash names as references,
and this is an abuse of Perl and not to be encouraged!
If you had
my %config = ( K => { K1 => 'V1' } );
my $config_file = \%config;
then %$config_file is the same as %config, so you can access
the element with
$config{K}
or
$config_file->{K}
What the book doesn't tell you, though, is that Perl will
let you treat the hash name as a reference like this
%config->{K}
which is the same as
%$config_file->{K}
So you've dereferenced $config_file and then used it as a reference,
so achieving nothing.
To summarize:
%$config_file->{$key}
is the same as
$config_file->{$key}
and so is the same as the first case, %{$config_file->{$key}}
without the additional level of dereferencing.
But, as I said, don't use the second case!
Cheers,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]