[Pdx-pm] sort issues.
Roth, Gabrielle
gabrielle.roth at xo.com
Fri Aug 30 12:36:46 CDT 2002
Hi all,
I am having a problem understanding what I need to do to get some hash keys
to sort correctly.
background:
I have a script that uses snmp to collect information (port names, duplex
settings, etc) about network switches; ultimately this information is
transferred to monitoring and mapping software. Currently I am gathering
this information into several hashes; the keys for the hashes are the
module.port assignment on the switch (eg 1.1, 1.2, etc).
---begin code snippet---
#!/usr/local/bin/perl
#Note: this hash is created when the script is run.
#I hard-coded it in here to simplify the problem (that was my theory, at
least)
%portName = (
1.1 => "smith",
1.3 => "gunks",
1.4 => "horsethief",
1.10 => "tahquitz",
1.12 => "carderock",
2.1 => "seneca",
2.2 => "newriva",
2.14 => "lincoln",
);
#from eg http://www.perlfect.com/articles/sorting.shtml
@key_array = sort {$a <=> $b} keys(%portName);
print ("port\tname\n");
foreach $port (@key_array) {
print ("$port\t$portName{$port}\n");
}
---end code snippet---
Ideally, my final output would look something like this:
port name
1.1 smith
1.3 gunks
1.4 horsethief
1.10 tahquitz
1.12 carderock
2.1 seneca
2.2 newriva
2.14 lincoln
Instead, I get this:
port name
1.1 tahquitz
1.12 carderock
1.3 gunks
1.4 horsethief
2.1 seneca
2.14 lincoln
2.2 newriva
I have two problems:
1. Obviously, the order isn't right. I thought the <=> operator would do a
numerical sort, but apparently that's just for integers? I'm not any better
off than if I just did a regular sort.
2. One of (1.1|1.10) goes missing; I thought maybe because the <=>
evaluated them as equivalent, but it does this with the "cmp" operator as
well. I tried quoting the keys, but that didn't help either.
What am I missing?
-gabrielle
"I don't mind the rat race but I could do with a little more cheese."
More information about the Pdx-pm-list
mailing list