in reply to sort HoA by tow keys

Well, the first thing wrong is you're initializing your hash with a HASHREF, not a hash. You might want to define the hash like this:
my %HoA=( 1=>["ab",20090101,91010], 2=>["cd",20090101,91010], 3=>["ef",20090201,101000], ...... );
Remember, hashes are initialized as lists; you could just as easily say
my %HoA = ( 1, [...], 2, [...], 3, [...], ... );
The initialization in your example, however, is effectively the following:
my %HoA = ( {...}, undef );
Your hash has one key--a reference to the data structure you built--and no values.

With that one change, the code runs, and that appears to be the meat of your question.