[tpm] OID sorting

Indy Singh indy at indigostar.com
Sat May 2 08:58:15 PDT 2009

Without a real description of the problem, here is my attempt.  I used a simple scalar representation of data instead of a tree.  If someone would care to do a time comparison, I would be curious to see the results.


use strict;
use warnings;

my @list = (
# The expected sort order is the same as the order above

sub byoid
  # convert dot seperated oid digits into a packed character string
  # suitable for string comparison, e.g. '65.66.67' => 'ABC'
  my $x;
  $x .= pack('C', $_) foreach (split(/\./, $a));
  my $y;  $y .= pack('C', $_) foreach (split(/\./, $b));
  return ($x cmp $y);

my @sorted = sort byoid @list;
print "Sorted list:\n", join("\n", @sorted), "\n";

sub byoid_slower_more_readable_version
  # convert dot seperated oid digits into digits with leading 0's
  # suitable for string comparison, e.g. '1.2.3' => '001002003'
  my $x;
  $x .= sprintf('%03d', $_) foreach (split(/\./, $a));
  my $y;
  $y .= sprintf('%03d', $_) foreach (split(/\./, $b));
  return ($x cmp $y);

Indy Singh
IndigoSTAR Software -- www.indigostar.com

  ----- Original Message ----- 
  From: Henry Baragar 
  To: Toronto Perl Mongers 
  Sent: Friday, May 01, 2009 2:46 PM
  Subject: [tpm] OID sorting


  There were a couple of suggestions for Fulko about how to improve his sorting of OID's (strings of the form ^\d+([.]\d+)*$). Attached is my suggestion for rebuilding the tree and walking the tree. I would be curious to see how this solution compares to the other solutions, both in terms of readability and performance.



  Henry Baragar
  Instantiated Software
  416-907-8454 x42


  toronto-pm mailing list
  toronto-pm at pm.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/toronto-pm/attachments/20090502/131d65c6/attachment.html>

More information about the toronto-pm mailing list