Matti Maekitalo: if {dann sortieren nach x} else {sortieren nach dem y}

Beitrag lesen

use Mosche;

ich sortiere so:
for(sort {$upsortierennach{$b} <=> $upsortierennach{$a}} keys %upsortierennach)

und das funzt auch super bei Zahlen, doch nun mein Problem:

ich möchte bei Event A nach 1ner Zahl sortieren (if)
und bei Event B nach 2 Zahlen (elsif)

» und bei Event C nach Buchstaben (else)

aber ich möchte den ganzen Block (for) nicht 3 (oder mehr)mal schreiben müssen.

for (sort deine_sort_sub keys %upsortierennach) {
 ###
}

sub deine_sort_sub {
  if ($A) {
    return $a <=> $b;
  } elseif ($B) {
    return $b <=> $a;
  } else {
    return $a cmp $b;
  }
}

Und wie kann ich überhaupt nach Buchstaben (Namen von AAl bis Zorro)
sortieren ?

Standardmäßig (d.h., wenn du keinen Sortiercode vorgibst), sortiert Perl nach Zeichen (Buchstaben). Du kannst das aber explizit angeben mitdem 'cmp' Operator, der genauso zu verwenden ist wie der '<=>'-Operator, aber eben für Zeichen.

use Tschoe qw(Matti);