Sort alpha on 1st field, numerical on 2nd field (sci notation)

I want to sort alphabetically on the first field and sort in descending numerical order on the 2nd field. With a normal "sort -r -n" it does this:

abc ||| 5e-05 ||| bla
abc ||| 3 ||| ble
def ||| 1 ||| abc
def ||| 0.2 ||| def

As you can see it ignores the fact that 5e-05 is actually 0.00005 therefore smaller than 3. The output I want would be

abc ||| 3 ||| ble
abc ||| 5e-05 ||| bla
def ||| 1 ||| abc
def ||| 0.2 ||| def

perl -e'
    print sort {
             ( split /\|\|\|/, $a )[0] cmp( split /\|\|\|/, $b )[0]
          || ( split /\|\|\|/, $b )[1] <=> ( split /\|\|\|/, $a )[1]
    } <>;
    ' infile