Wiggins,
 
  Thanks I'll try your suggestion and let you know
  What works.

Phillip

-----Original Message-----
From: Wiggins d Anconia [mailto:[EMAIL PROTECTED] 
Sent: Friday, October 31, 2003 12:33 PM
To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: Hash Issue



> 
> Hi,
> 
>  
> 
>   I've been playing around with the Tie::IxHash module.
> 
>  
> 
>  Here is my part of my code:
> 

It appears to be lacking, use strict and use warnings these will help
you track down on your own your errors....

>  
> 
> tie my %commands, "Tie::IxHash";
> 
>  
> 
> %commands = ('sol'=>{'hostname'  =>'uname -n', 
> 
>                              'os'             =>'unamed -s',
> 
>                              'over'          =>'uname -r',
> 
>                              'osrel'         =>'cat /etc/release | awk
> \'{print $3}\'',
> 
>                              'srvtype'      =>'uname -p',
> 
>                              'srvmodel'    =>'uname -i | cut -f2 -d ","',
> 
>                              'memory'     =>'prtconf | grep Memory | awk
> \'{print $3}\'',
> 
>                              'cpu'            =>'psrinfo | awk \'{print
> $1}\' | wc -l'}
> 
>                 ); 
> 
>  
I haven't used the tied hash much, but assuming it works as a regular
has as it should...

> 
>  
> 
> foreach $OS (keys %commands){
> 

Right here $OS contains a hash reference to the inner hash for the
particular operating system...

>   print "OS: $OS \n";
> 
>   while (( $OS, $CMD ) = each %commands ) {
> 

Right here you are eaching over %commands inside a foreach on keys which
is probably not what you want, and is probably doing screwy things, like
resetting the position indicator of the hash.... And you are also
clobbering your preset $OS which means you can no longer access that
particular hash to loop over.

>     print "$OS Commands are $items .\n";    ***** 
> 

Where did $items come from in the first place.  

>   }
> 
> }
> 
>  
> 
> If I change the $items variable in the print statement where the
asterisk is
> to $CMD I get nothing but a hex value output. Has anyone have a suggestion
> what I'm doing wrong. 
> 

How about:

foreach my $OS (keys(%commands)) {
   while (my ($key, $command) = each (%$OS)) {
      print "$key running $command\n";
   }
}

I was thinking that your use of the tied hash was to get the commands to
run in order rather than the OS's (maybe I missed part of this
discussion) if that is the case the inner hashes must be the tied
variants, rather than the outer.....

[Bruce, Phillip] It still is my purpose to get the commands to run
in that order. That why I'm using Tie::IxHash that was suggested by
someone on this list but they haven't used it either. 

I'll try your sequence and see if that works. Thanks for the suggestions.

perldoc perllol
perldoc perldsc
perldoc perlreftut
perldoc perlref

http://danconia.org

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to