Getting Values from Hashes

G

George Kinley

Hi
I have an hash as $Hash{Name}{NickName}
Where Name is String
NickName Array
I can get All NickName in an array as

@AllNN=values @{$$Hash{Name}}

my query is Why I cant get the same result with
@AllNN=values %{$Hash{Name}}
or
@AllNN=values $Hash{Name}




--
 
P

Paul Lalli

Hi
I have an hash as $Hash{Name}{NickName}
Where Name is String
NickName Array
I can get All NickName in an array as

@AllNN=values @{$$Hash{Name}}

my query is Why I cant get the same result with
@AllNN=values %{$Hash{Name}}
or
@AllNN=values $Hash{Name}

Analize your datastructure. It looks something like this, yes?

%Hash = (
'Robert' => ['Bob', 'Rob'],
'William' => ['Will', 'Billy'],
);


Now analize the code you were trying to use.

values %{$Hash{'Robert'}}

$Hash{'Robert'} is an array reference. It references an array containing
Bob and Rob. You cannot derefernce this as a hash because it is not a
hash reference.

values $Hash{'Robert'}

$Hash{'Robert'} is an array reference. You cannot use values on an array
reference. The argument to values() must be a hash.

I don't quite understand your claim that values @{$$Hash{Name}} works like
you want it. Even if I have misunderstood your datastructure, you cannot
pass an array to values(). This is a syntax error.

Using the datastructure I typed above, you would get all the nicknames for
a particular name like this:
@nicks = @{$Hash{'Robert'}};

If you want *all* nicknames, you could use something like this:

@all_nicks = map { @{$Hash{$_}} } keys %Hash;



If you need further assistance (if, for example, I have not understood
your description of your datastructure), please post a short but complete
program demonstrating your issue.

Thank you,
Paul Lalli
 
G

George Kinley

Paul said:
Hi
I have an hash as $Hash{Name}{NickName}
Where Name is String
NickName Array
I can get All NickName in an array as

@AllNN=values @{$$Hash{Name}}

my query is Why I cant get the same result with
@AllNN=values %{$Hash{Name}}
or
@AllNN=values $Hash{Name}

Analize your datastructure. It looks something like this, yes?

%Hash = (
'Robert' => ['Bob', 'Rob'],
'William' => ['Will', 'Billy'],
);


Now analize the code you were trying to use.

values %{$Hash{'Robert'}}

$Hash{'Robert'} is an array reference. It references an array
containing Bob and Rob. You cannot derefernce this as a hash because
it is not a hash reference.

values $Hash{'Robert'}

$Hash{'Robert'} is an array reference. You cannot use values on an
array reference. The argument to values() must be a hash.

I don't quite understand your claim that values @{$$Hash{Name}} works
like you want it. Even if I have misunderstood your datastructure,
you cannot pass an array to values(). This is a syntax error.

Using the datastructure I typed above, you would get all the
nicknames for a particular name like this:
@nicks = @{$Hash{'Robert'}};

If you want all nicknames, you could use something like this:

@all_nicks = map { @{$Hash{$_}} } keys %Hash;



If you need further assistance (if, for example, I have not understood
your description of your datastructure), please post a short but
complete program demonstrating your issue.

Thank you,
Paul Lalli


I believe its my mistake that I did not mentioned that I was getting
this HASH as reference from another procedure, so that is the reason I
need to dereference it by double "$"
--
 
P

Paul Lalli

I believe its my mistake that I did not mentioned that I was getting
this HASH as reference from another procedure, so that is the reason I
need to dereference it by double "$"


This is not at all the issue. You're claiming that you're passing an
array (something that starts with '@') to the values() function. This
doesn't work. It's a syntax error. It doesn't matter how many levels of
dereferencing are involved.

Post a short but complete program that illustrates your problem if you're
still having one.

Paul Lalli
 
G

George Kinley

Paul said:
This is not at all the issue. You're claiming that you're passing an
array (something that starts with '@') to the values() function. This
doesn't work. It's a syntax error. It doesn't matter how many
levels of dereferencing are involved.

Post a short but complete program that illustrates your problem if
you're still having one.

Paul Lalli

SOrry for asking the wrong question I was also not using the "values"
Sorry again


But my questions was

my query is Why I cant get the same result with
that was explained by you thanks
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top