in reply to Trouble sorting a nested HOH

I'm not sure I understand your goal. You seem to be printing a sequence of structured "paragraphs", like:
Report on remote host: (some.host) pid: (some pid) some socket statistics some more socket statistics ... pid: (some other pid) still more socket statistics had enough socket statistics? ... Report on remote host: (another.host) pid: (yet another pid) ... ...
Now, are you supposed to be sorting according to the "cnt" value within each "pid" paragraph? Or are you supposed to sort the pid paragraphs within a given "rip" section according to which pid has the highest "cnt" value? Or are you supposed to sort the "Remote host" sections according to which one has the highest "cnt" value?

Or maybe you don't really want the output to be structured that way? If you want each "rip/pid/socktype" ordered according to its respective "cnt" value (that is, it's okay that various lines for "rip X" are interleaved with lines for "rip Y" because of their "cnt" rankings), then you just come up with a suitable report line format that keeps all the information together on each line, use your loop to "sprintf()" each report line onto an array, then sort the array before you print it.

Once you clarify what you're trying to do, the answer should come pretty quickly.

(updated to fix grammar)

Replies are listed 'Best First'.
Re^2: Trouble sorting a nested HOH
by mielstogo (Initiate) on Nov 28, 2007 at 04:55 UTC
    Originally I just sorted the outer "paragraphs", where remote host IP address was sorted in ascending order. Then once my team saw the report they thought it was great except for the fact that they had to scan down the report to see sockets with high cnt values.
    When analyzing performance we weight a higher cnt (more socket activity) greater than one with only cnt=1 since that only happens once.
    So I thought there should be a way I could sort by cnt and not care about the order of RemoteIP, pid but just make sure the correct ones are correlated with the cnt value.
    RemIP, Pid, Type, Cnt, Avg, Min, Max a b c 999 0.1 0.05 0.5 a1 b1 c1 871 0.02 0.02 0.7 a2 b2 c2 25 0.01 0.03 0.234
      Actually I gave a bad example in my original perl code since that was the text mode report. The HTML mode report has the same perl Hash but loads a HTML table similar to my table example above.

      I want to sort by 'cnt' so perhaps I'm better off just loading an array with the row values from the hash and sorting it as I load it. I can sort by RemIP, or PID no problem. I get lost when it comes to 'cnt' since if I sort it at the wrong place im just ordering it within the Type or PID part.
      Whereas what I want is to bubble the rows with high CNT values up to the top of the report.
      $sock_total{$rip}{$pid}{$type}{'cnt'}