通过在Perl中获取子集来对哈希键进行排序

use*_*964 0 perl hash

有没有办法通过只取一个子集(最后两个字符)来对哈希键进行排序?

例如:

$VAR1 = {
      'OCT12' => 1,
      'JAN13' => 4,
      'JAN14' => 39,
      'SRF14' => 1,
      'OCN13' => 64,
      'SBF14' => 80,
      'DEC13' => 22,
};
Run Code Online (Sandbox Code Playgroud)

我期待得到输出:"OCT12","JAN13","OCN13","DEC13","JAN14","SRF14".

干杯,何塞

ike*_*ami 6

sort { substr($a, -2) cmp substr($b, -2) } keys(%$VAR1)
Run Code Online (Sandbox Code Playgroud)

如果你想通过第一部分排序来打破关系,

sort { substr($a, -2) cmp substr($b, -2) || $a cmp $b } keys(%$VAR1)
Run Code Online (Sandbox Code Playgroud)


Сух*_*й27 5

my @sorted_keys = 
  map $_->[0],
  sort { $a->[1] <=> $b->[1] }
  map [$_, /(\d+)$/],
  keys %h;
Run Code Online (Sandbox Code Playgroud)