Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > de-references

Reply
Thread Tools

de-references

 
 
CJ
Guest
Posts: n/a
 
      12-17-2003
Perl-folks,

Got a question that I hope someone can answer. I often use hashs like
structures and they sometimes contain references to other hashs or arrays.
My question is what is the best way to de-reference the internal hash or
array. An example. I recent wrote something that creates a hash which has
a default server name and a reference to an array of other server names.

%server_info = (default_server=>\$default,
server_list=> \@servers);

The sub that creates this hash returns a reference to that hash...

return \%server_info;

When I try to use it in the calling program, I have tried to use the
following line only to get syntax errors...

$server_list = sub_called_earlier();

foreach $element (@($server_list->{server_list})) {

do something with $element;
}

Seems like this should work as $server_list->{server_list} is a reference to
an array. I can get it work by using the following...

$server_array_ref = $server_list->{server_list};
foreach $element (@$server_array_ref) {

do something with $element;
}

This seems like a real waste of time and there has to be a way to make it
work properly. I have spent time looking for an answer, but have come
up short. If anyone has a reference (no pun intended) to point me to or a
concept on how they make it work, would love to hear it. Thanks.

CJ


 
Reply With Quote
 
 
 
 
Jürgen Exner
Guest
Posts: n/a
 
      12-17-2003
CJ wrote:
> My question is what is the best way to de-reference the
> internal hash or array. [...].
>
> %server_info = (default_server=>\$default,
> server_list=> \@servers);
>
> The sub that creates this hash returns a reference to that hash...
>
> return \%server_info;
>
> When I try to use it in the calling program, I have tried to use the
> following line only to get syntax errors...
>
> $server_list = sub_called_earlier();
> foreach $element (@($server_list->{server_list})) {


Right idea, wrong style of brackets. Try curlies instead:
foreach $element (@{$server_list->{server_list}}) {

[...]
> I have spent time looking for an answer, but
> have come up short. If anyone has a reference (no pun intended) to
> point me to or a concept on how they make it work, would love to hear
> it.


Please see "perldoc perlref"

jue


 
Reply With Quote
 
 
 
 
nobull@mail.com
Guest
Posts: n/a
 
      12-17-2003
"CJ" <(E-Mail Removed)> wrote in message news:<cfTDb.37$(E-Mail Removed)>...
> Perl-folks,
>
> Got a question that I hope someone can answer. I often use hashs like
> structures and they sometimes contain references to other hashs or arrays.
> My question is what is the best way to de-reference the internal hash or
> array.


See:
perldoc perlref
perldoc prelreftut

> An example. I recent wrote something that creates a hash which has
> a default server name and a reference to an array of other server names.
>
> %server_info = (default_server=>\$default,
> server_list=> \@servers);
>
> The sub that creates this hash returns a reference to that hash...
>
> return \%server_info;
>
> When I try to use it in the calling program, I have tried to use the
> following line only to get syntax errors...
>
> $server_list = sub_called_earlier();
>
> foreach $element (@($server_list->{server_list})) {


When reading Perl code or Perl manuals make sure to use a font in
which {} and () are clearly destinguished. The syntax for
dereferncing a reference that is the result an expression encloses the
expression in {} not ().

This newsgroup does not exist (see FAQ). Please do not start threads
here.
 
Reply With Quote
 
CJ
Guest
Posts: n/a
 
      12-17-2003
Jue,

Thank you for the info, have looked thru the perdoc, but guess I missed
it. Thanks again for the help and quick response.

CJ
"Jürgen Exner" <(E-Mail Removed)> wrote in message
news:JGWDb.20768$(E-Mail Removed)...
> CJ wrote:
> > My question is what is the best way to de-reference the
> > internal hash or array. [...].
> >
> > %server_info = (default_server=>\$default,
> > server_list=> \@servers);
> >
> > The sub that creates this hash returns a reference to that hash...
> >
> > return \%server_info;
> >
> > When I try to use it in the calling program, I have tried to use the
> > following line only to get syntax errors...
> >
> > $server_list = sub_called_earlier();
> > foreach $element (@($server_list->{server_list})) {

>
> Right idea, wrong style of brackets. Try curlies instead:
> foreach $element (@{$server_list->{server_list}}) {
>
> [...]
> > I have spent time looking for an answer, but
> > have come up short. If anyone has a reference (no pun intended) to
> > point me to or a concept on how they make it work, would love to hear
> > it.

>
> Please see "perldoc perlref"
>
> jue
>
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments