Wiggins,

   That works ok but still doesn't sort my keys correctly
   Even if I use sort like so doesn't work. Like what I 
   have below:

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

Just wondering what if I add a number in my hash to indicate
Order. Maybe something like this:

%commands = ('sol'=>{'hostname'  => [1,'uname -n'], 
                       'os'        => [2,'uname -s'],
                         'osver'     => [3,'uname -r'],
                         'osrel'     => [4,'cat /etc/release | awk \'{print
$3}\''],
                         'srvtype'   => [5,'uname -p'],
                     'srvmodel'  => [6,'uname -i | cut -f2 -d ","'],
                         'memory'    => [7,'prtconf | grep Memory | awk
\'{print $3}\''],
                         'cpu'       => [8,'psrinfo | awk \'{print $1}\' |
wc -l']}
            );

That way I can index the file and use sort routine to do this:

foreach my $OS (sort {lc($a) <=> lc($b)} keys(%commands)) {
    while (my ($key, $command) = each (%{$commands{$OS}})) {
       print "$key running $command\n";
    }
}

Maybe that might work but then how would I extract my commands.
Any thoughts?

Phillip
-----Original Message-----
From: Wiggins d'Anconia [mailto:[EMAIL PROTECTED] 
Sent: Friday, October 31, 2003 3:24 PM
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: Re: Hash Issue

[EMAIL PROTECTED] wrote:
> Wiggins,
> 
>  I tried that suggestion you have and got the
>  The following message:
> 
> C:\Perl\Accenture>perl test2.pl
> Can't use string ("sol") as a HASH ref while "strict refs" in use at
> test2.pl line 59.
> 
> That is using your suggestion:
> 
> foreach my $OS (keys(%commands)) {
>    while (my ($key, $command) = each (%$OS)) {
>       print "$key running $command\n";
>    }
> }


Sorry I should test my own suggestions ;)...

That should have been:

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

http://danconia.org

> -----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.....
> 
> 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