> Programming Languages > Perl
Various Topics Home | Disclaimer | Report Adult Posts

Various Topics on Perl



Perl - "Getting Values from Hashes" in Programming Languages


Old 06-18-2004   #1
..or.. ..nl..
 
Default Getting Values from Hashes

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}




--
 
Old 06-18-2004   #2
..nn.. ..almarss..
 
Default Re: Getting Values from Hashes

George Kinley wrote:
> 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}}


I find that hard to believe. Please post a short but complete program
that people can copy and run, and that illustrates what you have.

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl

 
Old 06-18-2004   #3
.... ..l..
 
Default Re: Getting Values from Hashes

On Fri, 18 Jun 2004, George Kinley wrote:

> 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
p*** 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 ***istance (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

 
Old 06-18-2004   #4
..or.. ..nl..
 
Default Re: Getting Values from Hashes

Paul Lalli wrote:

> On Fri, 18 Jun 2004, George Kinley wrote:
>
> > 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 p*** 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 ***istance (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 "$"
--
 
Old 06-18-2004   #5
.... ..l..
 
Default Re: Getting Values from Hashes

On Fri, 18 Jun 2004, George Kinley wrote:

> Paul Lalli wrote:
>
> > On Fri, 18 Jun 2004, George Kinley wrote:
> >
> > > 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}
> > >

> >
> > 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 p*** an array to values(). This is a syntax error.
> >

>
> 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 p***ing 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
 
Old 06-21-2004   #6
..or.. ..nl..
 
Default Re: Getting Values from Hashes

Paul Lalli wrote:

> On Fri, 18 Jun 2004, George Kinley wrote:
>
> > Paul Lalli wrote:
> >
> > > On Fri, 18 Jun 2004, George Kinley wrote:
> > >
> > > > 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}
> > > >
> > >
> > > 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 p*** an array to values(). This is a
> > > syntax error.
> > >

> >
> > 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 p***ing 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
> > > > @AllNN=values %{$Hash{Name}}
> > > > or
> > > > @AllNN=values $Hash{Name}
> > > >


that was explained by you thanks
--
-Gk
 

Thread Tools
Display Modes





Powered by vBulletin®
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0