使用perl对包含字母数字的哈希中的键进行排序

使用perl对包含字母数字的哈希中的键进行排序,perl,hash,Perl,Hash,如何从散列中对键进行排序(在键中,散列中包含字母数字),并将散列打印为输出 %bibIdstr = ( 'bib16' => 'newbib12', 'bib7' => 'newbib6', 'bib11' => 'newbib9', 'bib4' => 'newbib4', 'bib2' => 'newbib2', 'bib1' => 'newbib1', 'bib18'

如何从散列中对键进行排序(在键中,散列中包含
字母数字
),并将散列打印为输出

 %bibIdstr = (
      'bib16' => 'newbib12',
      'bib7' => 'newbib6',
      'bib11' => 'newbib9',
      'bib4' => 'newbib4',
      'bib2' => 'newbib2',
      'bib1' => 'newbib1',
      'bib18' => 'newbib13',
      'bib13' => 'newbib10',
      'bib14' => 'newbib11',
      'bib10' => 'newbib8',
      'bib8' => 'newbib7',
      'bib6' => 'newbib5',
      'bib3' => 'newbib3'
    );
我的代码:

foreach my $keys (sort (keys %bibIdstr))
{
    print $keys ."->". $bibIdstr{$keys} . "\n";
}
其打印输出如下

bib1->newbib1
bib10->newbib8
bib11->newbib9
bib13->newbib10
bib14->newbib11
bib16->newbib12
bib18->newbib13
bib2->newbib2
bib3->newbib3
bib4->newbib4
bib6->newbib5
bib7->newbib6
bib8->newbib7
但我的预期产出是:

bib1->newbib1
bib2->newbib2
bib3->newbib3
bib4->newbib4
bib6->newbib5
bib7->newbib6
bib8->newbib7
bib10->newbib8
bib11->newbib9
bib13->newbib10
bib14->newbib11
bib16->newbib12
bib18->newbib13
如果有人能在这方面提供帮助,我们将不胜感激

谢谢

试试这个:

%bibIdstr = (
      'bib16' => 'newbib12',
      'bib7' => 'newbib6',
      'bib11' => 'newbib9',
      'bib4' => 'newbib4',
      'bib2' => 'newbib2',
      'bib1' => 'newbib1',
      'bib18' => 'newbib13',
      'bib13' => 'newbib10',
      'bib14' => 'newbib11',
      'bib10' => 'newbib8',
      'bib8' => 'newbib7',
      'bib6' => 'newbib5',
      'bib3' => 'newbib3'
    );

sub sortByNumber($$){
my      $a = shift;
my      $b = shift;
        $a =~ s/bib//;
        $b =~ s/bib//;

        return $a <=> $b;
}

foreach my $keys (sort {sortByNumber($a,$b) }(keys %bibIdstr))
{
    print $keys ."->". $bibIdstr{$keys} . "\n";
}

请你解释一下这是如何重复的,同时将问题与已经提出的问题进行比较。这是散列变量,这是数组变量。我不知道如何将数组的输出转换成散列。提示:将
keys%bibIdstr
放入数组并排序。此外,您可能还想查看一下
Sort::Naturally
@Downvoter:这是用于无需解释的downvoting
bib1->newbib1
bib2->newbib2
bib3->newbib3
bib4->newbib4
bib6->newbib5
bib7->newbib6
bib8->newbib7
bib10->newbib8
bib11->newbib9
bib13->newbib10
bib14->newbib11
bib16->newbib12
bib18->newbib13